From ebad456ea95a915ed872a9d1ab90f003959f4c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Gr=C3=A4f?= <aggraef@gmail.com> Date: Wed, 24 Jul 2019 07:43:54 +0200 Subject: [PATCH] Remove fftease and lyonpoptpourri submodules, add sources in-place. --- .gitmodules | 6 - externals/fftease | 1 - externals/fftease/LICENSE.txt | 20 + externals/fftease/MSPd.h | 15 + externals/fftease/Makefile | 454 ++ externals/fftease/PenroseOscil.c | 40 + externals/fftease/PenroseOscil.h | 5 + externals/fftease/PenroseRand.c | 13 + externals/fftease/PenroseRand.h | 3 + externals/fftease/README.txt | 49 + externals/fftease/bloscbank.c | 34 + externals/fftease/bthresher~.c | 486 ++ externals/fftease/burrow~.c | 390 ++ externals/fftease/cavoc27~.c | 633 +++ externals/fftease/cavoc~.c | 472 ++ externals/fftease/centerring~.c | 380 ++ externals/fftease/codepend~.c | 377 ++ externals/fftease/collect.pl | 6 + externals/fftease/convert.c | 49 + externals/fftease/cross~.c | 297 ++ externals/fftease/dentist~.c | 585 +++ externals/fftease/disarrain~.c | 687 +++ externals/fftease/disarray~.c | 403 ++ externals/fftease/drown~.c | 245 + externals/fftease/enrich~.c | 366 ++ externals/fftease/ether~.c | 313 ++ externals/fftease/fft.c | 159 + externals/fftease/fft4.c | 336 ++ externals/fftease/fftease-meta.pd | 6 + externals/fftease/fftease.h | 177 + .../fftease32-helpfiles/bthresher~-help.pd | 52 + .../fftease32-helpfiles/burrow~-help.pd | 86 + .../fftease32-helpfiles/cavoc27~-help.pd | 120 + .../fftease32-helpfiles/cavoc~-help.pd | 78 + .../fftease32-helpfiles/centerring~-help.pd | 51 + .../fftease32-helpfiles/codepend~-help.pd | 72 + .../fftease32-helpfiles/cross~-help.pd | 124 + .../fftease32-helpfiles/dentist~-help.pd | 77 + .../fftease32-helpfiles/disarrain~-help.pd | 86 + .../fftease32-helpfiles/disarray~-help.pd | 50 + .../fftease32-helpfiles/drown~-help.pd | 51 + .../fftease32-helpfiles/enrich~-help.pd | 68 + .../fftease32-helpfiles/ether~-help.pd | 51 + .../fftease32-helpfiles/leaker~-help.pd | 50 + .../fftease32-helpfiles/mindwarp~-help.pd | 93 + .../fftease32-helpfiles/morphine~-help.pd | 53 + .../fftease32-helpfiles/multyq~-help.pd | 60 + .../fftease32-helpfiles/pileup~-help.pd | 69 + .../fftease32-helpfiles/pvcompand~-help.pd | 31 + .../fftease32-helpfiles/pvgrain~-help.pd | 440 ++ .../fftease32-helpfiles/pvharm~-help.pd | 46 + .../fftease/fftease32-helpfiles/pvoc~-help.pd | 44 + .../fftease32-helpfiles/pvtuner~-help.pd | 101 + .../fftease32-helpfiles/pvwarpb~-help.pd | 105 + .../fftease32-helpfiles/pvwarp~-help.pd | 68 + .../fftease32-helpfiles/reanimator~-help.pd | 76 + .../fftease32-helpfiles/resent~-help.pd | 129 + .../residency_buffer~-help.pd | 76 + .../fftease32-helpfiles/residency~-help.pd | 62 + .../fftease32-helpfiles/schmear~-help.pd | 68 + .../fftease32-helpfiles/scrape~-help.pd | 46 + .../fftease32-helpfiles/shapee~-help.pd | 38 + .../fftease/fftease32-helpfiles/smap-help.pd | 9 + .../fftease32-helpfiles/sound/Piano.aif | Bin 0 -> 92812 bytes .../fftease32-helpfiles/swinger~-help.pd | 37 + .../fftease32-helpfiles/taint~-help.pd | 82 + .../fftease32-helpfiles/thresher~-help.pd | 45 + .../fftease32-helpfiles/vacancy~-help.pd | 64 + .../fftease/fftease32-helpfiles/xsyn~-help.pd | 35 + externals/fftease/fftease_setup.c | 5 + externals/fftease/fftease_utilities.c | 276 + externals/fftease/fold.c | 32 + externals/fftease/leaker~.c | 308 ++ externals/fftease/leanconvert.c | 22 + externals/fftease/leanunconvert.c | 19 + externals/fftease/legacy.c | 83 + externals/fftease/limit_fftsize.c | 32 + externals/fftease/limited_oscbank.c | 132 + externals/fftease/lyonpotpourri-meta.pd | 7 + externals/fftease/m_pd.h | 634 +++ externals/fftease/makewindows.c | 137 + externals/fftease/mindwarp~.c | 383 ++ externals/fftease/morphine~.c | 392 ++ externals/fftease/multyq~.c | 450 ++ externals/fftease/oscbank.c | 88 + externals/fftease/overlapadd.c | 29 + externals/fftease/pileup~.c | 357 ++ externals/fftease/power_of_two.c | 15 + externals/fftease/pvcompand~.c | 329 ++ externals/fftease/pvgrain~.c | 318 ++ externals/fftease/pvharm~.c | 351 ++ externals/fftease/pvoc~.c | 253 + externals/fftease/pvtuner~.c | 1014 ++++ externals/fftease/pvwarpb~.c | 515 ++ externals/fftease/pvwarp~.c | 439 ++ externals/fftease/qsortE.c | 241 + externals/fftease/reanimator~.c | 548 ++ externals/fftease/resent~.c | 669 +++ externals/fftease/residency_buffer~.c | 471 ++ externals/fftease/residency~.c | 491 ++ externals/fftease/schmear~.c | 309 ++ externals/fftease/scrape~.c | 288 ++ externals/fftease/shapee~.c | 366 ++ externals/fftease/smap.pd | 28 + externals/fftease/swinger~.c | 294 ++ externals/fftease/taint~.c | 378 ++ externals/fftease/thresher~.c | 272 + externals/fftease/unconvert.c | 39 + externals/fftease/vacancy~.c | 382 ++ externals/fftease/xsyn~.c | 233 + externals/lyonpotpourri | 1 - externals/lyonpotpourri/INSTALLATION.txt | 1 + externals/lyonpotpourri/LICENSE.txt | 23 + externals/lyonpotpourri/MSPd.h | 42 + externals/lyonpotpourri/Makefile | 448 ++ externals/lyonpotpourri/PenroseOscil.c | 40 + externals/lyonpotpourri/PenroseOscil.h | 8 + externals/lyonpotpourri/PenroseRand.c | 13 + externals/lyonpotpourri/PenroseRand.h | 3 + externals/lyonpotpourri/README.md | 72 + externals/lyonpotpourri/README.txt | 71 + externals/lyonpotpourri/Updates.txt | 4 + externals/lyonpotpourri/adsr~-help.pd | 73 + externals/lyonpotpourri/adsr~.c | 334 ++ externals/lyonpotpourri/arrayfilt~-help.pd | 145 + externals/lyonpotpourri/arrayfilt~.c | 90 + externals/lyonpotpourri/bashfest.h | 185 + externals/lyonpotpourri/bashfest_dsp.c | 1547 ++++++ externals/lyonpotpourri/bashfest_helper.c | 648 +++ externals/lyonpotpourri/bashfest~-help.pd | 312 ++ externals/lyonpotpourri/bashfest~.c | 1357 +++++ externals/lyonpotpourri/bloscbank.c | 1 + externals/lyonpotpourri/buffet~-help.pd | 201 + externals/lyonpotpourri/buffet~.c | 2161 ++++++++ externals/lyonpotpourri/bvplay~-help.pd | 52 + externals/lyonpotpourri/bvplay~.c | 297 ++ externals/lyonpotpourri/cartopol~-help.pd | 58 + externals/lyonpotpourri/cartopol~.c | 63 + externals/lyonpotpourri/channel~-help.pd | 53 + externals/lyonpotpourri/channel~.c | 84 + externals/lyonpotpourri/chopper~-help.pd | 202 + externals/lyonpotpourri/chopper~.c | 909 ++++ .../lyonpotpourri/clean_selector~-help.pd | 42 + externals/lyonpotpourri/clean_selector~.c | 241 + externals/lyonpotpourri/click2bang~-help.pd | 10 + externals/lyonpotpourri/click2bang~.c | 64 + externals/lyonpotpourri/click2float~-help.pd | 11 + externals/lyonpotpourri/click2float~.c | 68 + externals/lyonpotpourri/clickhold~-help.pd | 16 + externals/lyonpotpourri/clickhold~.c | 61 + externals/lyonpotpourri/click~-help.pd | 26 + externals/lyonpotpourri/click~.c | 78 + externals/lyonpotpourri/collect.pl | 6 + externals/lyonpotpourri/convert.c | 1 + externals/lyonpotpourri/convolver~-help.pd | 88 + externals/lyonpotpourri/convolver~.c | 1009 ++++ externals/lyonpotpourri/counter~-help.pd | 32 + externals/lyonpotpourri/counter~.c | 127 + externals/lyonpotpourri/distortion~-help.pd | 41 + externals/lyonpotpourri/distortion~.c | 226 + externals/lyonpotpourri/dmach~-help.pd | 1304 +++++ externals/lyonpotpourri/dmach~.c | 1225 +++++ externals/lyonpotpourri/dynss~-help.pd | 54 + externals/lyonpotpourri/dynss~.c | 324 ++ externals/lyonpotpourri/ellipse.c | 250 + externals/lyonpotpourri/epluribus~-help.pd | 32 + externals/lyonpotpourri/epluribus~.c | 149 + externals/lyonpotpourri/examples/BD0010.aif | Bin 0 -> 89282 bytes externals/lyonpotpourri/examples/BT0AADA.aiff | Bin 0 -> 44030 bytes externals/lyonpotpourri/examples/CP.aif | Bin 0 -> 21536 bytes .../lyonpotpourri/examples/KR55SNAR.aiff | Bin 0 -> 18622 bytes externals/lyonpotpourri/examples/bell.aiff | Bin 0 -> 312012 bytes .../lyonpotpourri/examples/hi_c_12b.aiff | Bin 0 -> 18248 bytes .../lyonpotpourri/examples/hi_o_06e.aiff | Bin 0 -> 39990 bytes .../lyonpotpourri/examples/hi_o_15g.aiff | Bin 0 -> 22396 bytes .../lyonpotpourri/examples/kick_11d.aiff | Bin 0 -> 33822 bytes externals/lyonpotpourri/examples/mar2.aif | Bin 0 -> 6152 bytes .../lyonpotpourri/examples/prettypad.aif | Bin 0 -> 547546 bytes externals/lyonpotpourri/examples/soda-bd.aif | Bin 0 -> 172368 bytes externals/lyonpotpourri/examples/trickhit.aif | Bin 0 -> 102662 bytes externals/lyonpotpourri/examples/voice.wav | Bin 0 -> 124204 bytes externals/lyonpotpourri/expflam~-help.pd | 136 + externals/lyonpotpourri/expflam~.c | 1 + externals/lyonpotpourri/fft.c | 1 + externals/lyonpotpourri/fft4.c | 1 + externals/lyonpotpourri/fftease.h | 61 + externals/lyonpotpourri/fftease_oldskool.h | 58 + externals/lyonpotpourri/fftease_setup.c | 5 + externals/lyonpotpourri/flanjah~-help.pd | 62 + externals/lyonpotpourri/flanjah~.c | 333 ++ externals/lyonpotpourri/fold.c | 1 + externals/lyonpotpourri/from_msp.c | 1 + externals/lyonpotpourri/function~-help.pd | 1308 +++++ externals/lyonpotpourri/function~.c | 380 ++ externals/lyonpotpourri/granola~-help.pd | 40 + externals/lyonpotpourri/granola~.c | 330 ++ externals/lyonpotpourri/granulesf~-help.pd | 4519 +++++++++++++++++ externals/lyonpotpourri/granulesf~.c | 1076 ++++ externals/lyonpotpourri/granule~-help.pd | 2387 +++++++++ externals/lyonpotpourri/granule~.c | 1 + externals/lyonpotpourri/kbuffer~-help.pd | 69 + externals/lyonpotpourri/kbuffer~.c | 310 ++ externals/lyonpotpourri/killdc~-help.pd | 27 + externals/lyonpotpourri/killdc~.c | 119 + externals/lyonpotpourri/latch~-help.pd | 28 + externals/lyonpotpourri/latch~.c | 111 + externals/lyonpotpourri/leanconvert.c | 1 + externals/lyonpotpourri/leanunconvert.c | 1 + externals/lyonpotpourri/lpp.h | 45 + externals/lyonpotpourri/lyonpotpourri-meta.pd | 7 + externals/lyonpotpourri/m_pd.h | 735 +++ .../lyonpotpourri/magfreq_analysis~-help.pd | 48 + externals/lyonpotpourri/magfreq_analysis~.c | 438 ++ externals/lyonpotpourri/makewindows.c | 1 + externals/lyonpotpourri/markov~-help.pd | 114 + externals/lyonpotpourri/markov~.c | 290 ++ externals/lyonpotpourri/mask~-help.pd | 34 + externals/lyonpotpourri/mask~.c | 363 ++ externals/lyonpotpourri/npan~-help.pd | 113 + externals/lyonpotpourri/npan~.c | 130 + externals/lyonpotpourri/oscil~-help.pd | 84 + externals/lyonpotpourri/oscil~.c | 789 +++ externals/lyonpotpourri/overlapadd.c | 1 + externals/lyonpotpourri/pd-template.spec | 29 + externals/lyonpotpourri/phasemod~-help.pd | 105 + externals/lyonpotpourri/phasemod~.c | 167 + externals/lyonpotpourri/player~-help.pd | 129 + externals/lyonpotpourri/player~.c | 522 ++ externals/lyonpotpourri/poltocar~-help.pd | 56 + externals/lyonpotpourri/poltocar~.c | 67 + externals/lyonpotpourri/power_of_two.c | 17 + externals/lyonpotpourri/pulser~-help.pd | 54 + externals/lyonpotpourri/pulser~.c | 214 + externals/lyonpotpourri/qsortE.c | 1 + externals/lyonpotpourri/quadpan~-help.pd | 120 + externals/lyonpotpourri/quadpan~.c | 1 + externals/lyonpotpourri/rotapan~-help.pd | 37 + externals/lyonpotpourri/rotapan~.c | 147 + externals/lyonpotpourri/rtrig~-help.pd | 1268 +++++ externals/lyonpotpourri/rtrig~.c | 145 + externals/lyonpotpourri/samm~-help.pd | 200 + externals/lyonpotpourri/samm~.c | 431 ++ externals/lyonpotpourri/sarec~-help.pd | 110 + externals/lyonpotpourri/sarec~.c | 400 ++ externals/lyonpotpourri/sel~-help.pd | 46 + externals/lyonpotpourri/sel~.c | 178 + externals/lyonpotpourri/shoehorn~-help.pd | 28 + externals/lyonpotpourri/shoehorn~.c | 174 + externals/lyonpotpourri/sigseq~-help.pd | 83 + externals/lyonpotpourri/sigseq~.c | 572 +++ externals/lyonpotpourri/smap-help.pd | 9 + externals/lyonpotpourri/smap.pd | 28 + externals/lyonpotpourri/splitbank~-help.pd | 355 ++ externals/lyonpotpourri/splitbank~.c | 1 + externals/lyonpotpourri/splitspec~-help.pd | 396 ++ externals/lyonpotpourri/splitspec~.c | 722 +++ externals/lyonpotpourri/squash~-help.pd | 85 + externals/lyonpotpourri/squash~.c | 437 ++ externals/lyonpotpourri/stutter~-help.pd | 124 + externals/lyonpotpourri/stutter~.c | 531 ++ externals/lyonpotpourri/ugens.h | 57 + externals/lyonpotpourri/unconvert.c | 34 + externals/lyonpotpourri/vdb~-help.pd | 106 + externals/lyonpotpourri/vdb~.c | 519 ++ externals/lyonpotpourri/vdp~-help.pd | 51 + externals/lyonpotpourri/vdp~.c | 477 ++ externals/lyonpotpourri/vecdex~-help.pd | 73 + externals/lyonpotpourri/vecdex~.c | 67 + externals/lyonpotpourri/waveshape~-help.pd | 36 + externals/lyonpotpourri/waveshape~.c | 171 + externals/lyonpotpourri/windowvec~-help.pd | 57 + externals/lyonpotpourri/windowvec~.c | 97 + 272 files changed, 60797 insertions(+), 8 deletions(-) delete mode 160000 externals/fftease create mode 100644 externals/fftease/LICENSE.txt create mode 100644 externals/fftease/MSPd.h create mode 100644 externals/fftease/Makefile create mode 100644 externals/fftease/PenroseOscil.c create mode 100644 externals/fftease/PenroseOscil.h create mode 100644 externals/fftease/PenroseRand.c create mode 100644 externals/fftease/PenroseRand.h create mode 100644 externals/fftease/README.txt create mode 100644 externals/fftease/bloscbank.c create mode 100644 externals/fftease/bthresher~.c create mode 100644 externals/fftease/burrow~.c create mode 100644 externals/fftease/cavoc27~.c create mode 100644 externals/fftease/cavoc~.c create mode 100644 externals/fftease/centerring~.c create mode 100644 externals/fftease/codepend~.c create mode 100644 externals/fftease/collect.pl create mode 100644 externals/fftease/convert.c create mode 100644 externals/fftease/cross~.c create mode 100644 externals/fftease/dentist~.c create mode 100644 externals/fftease/disarrain~.c create mode 100644 externals/fftease/disarray~.c create mode 100644 externals/fftease/drown~.c create mode 100644 externals/fftease/enrich~.c create mode 100644 externals/fftease/ether~.c create mode 100644 externals/fftease/fft.c create mode 100644 externals/fftease/fft4.c create mode 100644 externals/fftease/fftease-meta.pd create mode 100644 externals/fftease/fftease.h create mode 100644 externals/fftease/fftease32-helpfiles/bthresher~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/burrow~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/cavoc27~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/cavoc~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/centerring~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/codepend~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/cross~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/dentist~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/disarrain~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/disarray~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/drown~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/enrich~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/ether~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/leaker~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/mindwarp~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/morphine~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/multyq~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pileup~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvcompand~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvgrain~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvharm~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvoc~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvtuner~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvwarpb~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/pvwarp~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/reanimator~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/resent~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/residency_buffer~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/residency~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/schmear~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/scrape~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/shapee~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/smap-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/sound/Piano.aif create mode 100644 externals/fftease/fftease32-helpfiles/swinger~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/taint~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/thresher~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/vacancy~-help.pd create mode 100644 externals/fftease/fftease32-helpfiles/xsyn~-help.pd create mode 100644 externals/fftease/fftease_setup.c create mode 100644 externals/fftease/fftease_utilities.c create mode 100644 externals/fftease/fold.c create mode 100644 externals/fftease/leaker~.c create mode 100644 externals/fftease/leanconvert.c create mode 100644 externals/fftease/leanunconvert.c create mode 100644 externals/fftease/legacy.c create mode 100644 externals/fftease/limit_fftsize.c create mode 100644 externals/fftease/limited_oscbank.c create mode 100644 externals/fftease/lyonpotpourri-meta.pd create mode 100644 externals/fftease/m_pd.h create mode 100644 externals/fftease/makewindows.c create mode 100644 externals/fftease/mindwarp~.c create mode 100644 externals/fftease/morphine~.c create mode 100644 externals/fftease/multyq~.c create mode 100644 externals/fftease/oscbank.c create mode 100644 externals/fftease/overlapadd.c create mode 100644 externals/fftease/pileup~.c create mode 100644 externals/fftease/power_of_two.c create mode 100644 externals/fftease/pvcompand~.c create mode 100644 externals/fftease/pvgrain~.c create mode 100644 externals/fftease/pvharm~.c create mode 100644 externals/fftease/pvoc~.c create mode 100644 externals/fftease/pvtuner~.c create mode 100644 externals/fftease/pvwarpb~.c create mode 100644 externals/fftease/pvwarp~.c create mode 100644 externals/fftease/qsortE.c create mode 100644 externals/fftease/reanimator~.c create mode 100644 externals/fftease/resent~.c create mode 100644 externals/fftease/residency_buffer~.c create mode 100644 externals/fftease/residency~.c create mode 100644 externals/fftease/schmear~.c create mode 100644 externals/fftease/scrape~.c create mode 100644 externals/fftease/shapee~.c create mode 100644 externals/fftease/smap.pd create mode 100644 externals/fftease/swinger~.c create mode 100644 externals/fftease/taint~.c create mode 100644 externals/fftease/thresher~.c create mode 100644 externals/fftease/unconvert.c create mode 100644 externals/fftease/vacancy~.c create mode 100644 externals/fftease/xsyn~.c delete mode 160000 externals/lyonpotpourri create mode 100755 externals/lyonpotpourri/INSTALLATION.txt create mode 100755 externals/lyonpotpourri/LICENSE.txt create mode 100755 externals/lyonpotpourri/MSPd.h create mode 100755 externals/lyonpotpourri/Makefile create mode 100755 externals/lyonpotpourri/PenroseOscil.c create mode 100755 externals/lyonpotpourri/PenroseOscil.h create mode 100755 externals/lyonpotpourri/PenroseRand.c create mode 100755 externals/lyonpotpourri/PenroseRand.h create mode 100755 externals/lyonpotpourri/README.md create mode 100755 externals/lyonpotpourri/README.txt create mode 100755 externals/lyonpotpourri/Updates.txt create mode 100755 externals/lyonpotpourri/adsr~-help.pd create mode 100755 externals/lyonpotpourri/adsr~.c create mode 100755 externals/lyonpotpourri/arrayfilt~-help.pd create mode 100755 externals/lyonpotpourri/arrayfilt~.c create mode 100755 externals/lyonpotpourri/bashfest.h create mode 100755 externals/lyonpotpourri/bashfest_dsp.c create mode 100755 externals/lyonpotpourri/bashfest_helper.c create mode 100755 externals/lyonpotpourri/bashfest~-help.pd create mode 100755 externals/lyonpotpourri/bashfest~.c create mode 100755 externals/lyonpotpourri/bloscbank.c create mode 100755 externals/lyonpotpourri/buffet~-help.pd create mode 100755 externals/lyonpotpourri/buffet~.c create mode 100755 externals/lyonpotpourri/bvplay~-help.pd create mode 100755 externals/lyonpotpourri/bvplay~.c create mode 100755 externals/lyonpotpourri/cartopol~-help.pd create mode 100755 externals/lyonpotpourri/cartopol~.c create mode 100755 externals/lyonpotpourri/channel~-help.pd create mode 100755 externals/lyonpotpourri/channel~.c create mode 100755 externals/lyonpotpourri/chopper~-help.pd create mode 100755 externals/lyonpotpourri/chopper~.c create mode 100755 externals/lyonpotpourri/clean_selector~-help.pd create mode 100755 externals/lyonpotpourri/clean_selector~.c create mode 100755 externals/lyonpotpourri/click2bang~-help.pd create mode 100755 externals/lyonpotpourri/click2bang~.c create mode 100755 externals/lyonpotpourri/click2float~-help.pd create mode 100755 externals/lyonpotpourri/click2float~.c create mode 100755 externals/lyonpotpourri/clickhold~-help.pd create mode 100755 externals/lyonpotpourri/clickhold~.c create mode 100755 externals/lyonpotpourri/click~-help.pd create mode 100755 externals/lyonpotpourri/click~.c create mode 100755 externals/lyonpotpourri/collect.pl create mode 100755 externals/lyonpotpourri/convert.c create mode 100755 externals/lyonpotpourri/convolver~-help.pd create mode 100755 externals/lyonpotpourri/convolver~.c create mode 100755 externals/lyonpotpourri/counter~-help.pd create mode 100755 externals/lyonpotpourri/counter~.c create mode 100755 externals/lyonpotpourri/distortion~-help.pd create mode 100755 externals/lyonpotpourri/distortion~.c create mode 100644 externals/lyonpotpourri/dmach~-help.pd create mode 100755 externals/lyonpotpourri/dmach~.c create mode 100755 externals/lyonpotpourri/dynss~-help.pd create mode 100755 externals/lyonpotpourri/dynss~.c create mode 100755 externals/lyonpotpourri/ellipse.c create mode 100755 externals/lyonpotpourri/epluribus~-help.pd create mode 100755 externals/lyonpotpourri/epluribus~.c create mode 100755 externals/lyonpotpourri/examples/BD0010.aif create mode 100755 externals/lyonpotpourri/examples/BT0AADA.aiff create mode 100755 externals/lyonpotpourri/examples/CP.aif create mode 100755 externals/lyonpotpourri/examples/KR55SNAR.aiff create mode 100755 externals/lyonpotpourri/examples/bell.aiff create mode 100755 externals/lyonpotpourri/examples/hi_c_12b.aiff create mode 100755 externals/lyonpotpourri/examples/hi_o_06e.aiff create mode 100755 externals/lyonpotpourri/examples/hi_o_15g.aiff create mode 100755 externals/lyonpotpourri/examples/kick_11d.aiff create mode 100755 externals/lyonpotpourri/examples/mar2.aif create mode 100755 externals/lyonpotpourri/examples/prettypad.aif create mode 100755 externals/lyonpotpourri/examples/soda-bd.aif create mode 100755 externals/lyonpotpourri/examples/trickhit.aif create mode 100755 externals/lyonpotpourri/examples/voice.wav create mode 100755 externals/lyonpotpourri/expflam~-help.pd create mode 100755 externals/lyonpotpourri/expflam~.c create mode 100755 externals/lyonpotpourri/fft.c create mode 100755 externals/lyonpotpourri/fft4.c create mode 100755 externals/lyonpotpourri/fftease.h create mode 100755 externals/lyonpotpourri/fftease_oldskool.h create mode 100755 externals/lyonpotpourri/fftease_setup.c create mode 100755 externals/lyonpotpourri/flanjah~-help.pd create mode 100755 externals/lyonpotpourri/flanjah~.c create mode 100755 externals/lyonpotpourri/fold.c create mode 100755 externals/lyonpotpourri/from_msp.c create mode 100755 externals/lyonpotpourri/function~-help.pd create mode 100755 externals/lyonpotpourri/function~.c create mode 100755 externals/lyonpotpourri/granola~-help.pd create mode 100755 externals/lyonpotpourri/granola~.c create mode 100755 externals/lyonpotpourri/granulesf~-help.pd create mode 100755 externals/lyonpotpourri/granulesf~.c create mode 100755 externals/lyonpotpourri/granule~-help.pd create mode 100755 externals/lyonpotpourri/granule~.c create mode 100755 externals/lyonpotpourri/kbuffer~-help.pd create mode 100755 externals/lyonpotpourri/kbuffer~.c create mode 100755 externals/lyonpotpourri/killdc~-help.pd create mode 100755 externals/lyonpotpourri/killdc~.c create mode 100755 externals/lyonpotpourri/latch~-help.pd create mode 100755 externals/lyonpotpourri/latch~.c create mode 100755 externals/lyonpotpourri/leanconvert.c create mode 100755 externals/lyonpotpourri/leanunconvert.c create mode 100755 externals/lyonpotpourri/lpp.h create mode 100755 externals/lyonpotpourri/lyonpotpourri-meta.pd create mode 100755 externals/lyonpotpourri/m_pd.h create mode 100755 externals/lyonpotpourri/magfreq_analysis~-help.pd create mode 100755 externals/lyonpotpourri/magfreq_analysis~.c create mode 100755 externals/lyonpotpourri/makewindows.c create mode 100755 externals/lyonpotpourri/markov~-help.pd create mode 100755 externals/lyonpotpourri/markov~.c create mode 100755 externals/lyonpotpourri/mask~-help.pd create mode 100755 externals/lyonpotpourri/mask~.c create mode 100755 externals/lyonpotpourri/npan~-help.pd create mode 100755 externals/lyonpotpourri/npan~.c create mode 100755 externals/lyonpotpourri/oscil~-help.pd create mode 100755 externals/lyonpotpourri/oscil~.c create mode 100755 externals/lyonpotpourri/overlapadd.c create mode 100755 externals/lyonpotpourri/pd-template.spec create mode 100755 externals/lyonpotpourri/phasemod~-help.pd create mode 100755 externals/lyonpotpourri/phasemod~.c create mode 100755 externals/lyonpotpourri/player~-help.pd create mode 100755 externals/lyonpotpourri/player~.c create mode 100755 externals/lyonpotpourri/poltocar~-help.pd create mode 100755 externals/lyonpotpourri/poltocar~.c create mode 100755 externals/lyonpotpourri/power_of_two.c create mode 100755 externals/lyonpotpourri/pulser~-help.pd create mode 100755 externals/lyonpotpourri/pulser~.c create mode 100755 externals/lyonpotpourri/qsortE.c create mode 100755 externals/lyonpotpourri/quadpan~-help.pd create mode 100755 externals/lyonpotpourri/quadpan~.c create mode 100755 externals/lyonpotpourri/rotapan~-help.pd create mode 100755 externals/lyonpotpourri/rotapan~.c create mode 100755 externals/lyonpotpourri/rtrig~-help.pd create mode 100755 externals/lyonpotpourri/rtrig~.c create mode 100755 externals/lyonpotpourri/samm~-help.pd create mode 100755 externals/lyonpotpourri/samm~.c create mode 100755 externals/lyonpotpourri/sarec~-help.pd create mode 100755 externals/lyonpotpourri/sarec~.c create mode 100755 externals/lyonpotpourri/sel~-help.pd create mode 100755 externals/lyonpotpourri/sel~.c create mode 100755 externals/lyonpotpourri/shoehorn~-help.pd create mode 100755 externals/lyonpotpourri/shoehorn~.c create mode 100755 externals/lyonpotpourri/sigseq~-help.pd create mode 100755 externals/lyonpotpourri/sigseq~.c create mode 100755 externals/lyonpotpourri/smap-help.pd create mode 100755 externals/lyonpotpourri/smap.pd create mode 100755 externals/lyonpotpourri/splitbank~-help.pd create mode 100755 externals/lyonpotpourri/splitbank~.c create mode 100755 externals/lyonpotpourri/splitspec~-help.pd create mode 100755 externals/lyonpotpourri/splitspec~.c create mode 100755 externals/lyonpotpourri/squash~-help.pd create mode 100755 externals/lyonpotpourri/squash~.c create mode 100755 externals/lyonpotpourri/stutter~-help.pd create mode 100755 externals/lyonpotpourri/stutter~.c create mode 100755 externals/lyonpotpourri/ugens.h create mode 100755 externals/lyonpotpourri/unconvert.c create mode 100755 externals/lyonpotpourri/vdb~-help.pd create mode 100755 externals/lyonpotpourri/vdb~.c create mode 100755 externals/lyonpotpourri/vdp~-help.pd create mode 100755 externals/lyonpotpourri/vdp~.c create mode 100755 externals/lyonpotpourri/vecdex~-help.pd create mode 100755 externals/lyonpotpourri/vecdex~.c create mode 100755 externals/lyonpotpourri/waveshape~-help.pd create mode 100755 externals/lyonpotpourri/waveshape~.c create mode 100755 externals/lyonpotpourri/windowvec~-help.pd create mode 100755 externals/lyonpotpourri/windowvec~.c diff --git a/.gitmodules b/.gitmodules index 5ea924121..b68dccb93 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,15 +4,9 @@ [submodule "l2ork_addons/cwiid"] path = externals/disis/cwiid url = https://github.com/pd-l2ork/cwiid -[submodule "externals/fftease"] - path = externals/fftease - url = https://git.purrdata.net/jwilkes/fftease.git [submodule "Gem"] path = Gem url = https://git.purrdata.net/jwilkes/Gem.git -[submodule "externals/lyonpotpourri"] - path = externals/lyonpotpourri - url = https://git.purrdata.net/jwilkes/lyonpotpourri3.0.git [submodule "l2ork_addons/raspberry_pi/disis_gpio/wiringPi"] path = l2ork_addons/raspberry_pi/disis_gpio/wiringPi url = https://git.purrdata.net/jwilkes/wiringPi.git diff --git a/externals/fftease b/externals/fftease deleted file mode 160000 index ecd960938..000000000 --- a/externals/fftease +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ecd960938ed5517a765770fe181b094bddae040c diff --git a/externals/fftease/LICENSE.txt b/externals/fftease/LICENSE.txt new file mode 100644 index 000000000..aeda5b632 --- /dev/null +++ b/externals/fftease/LICENSE.txt @@ -0,0 +1,20 @@ +FFTease 3.0 is Copyright (c) 1999-2014 Eric Lyon and Christopher Penrose + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/externals/fftease/MSPd.h b/externals/fftease/MSPd.h new file mode 100644 index 000000000..9b971506e --- /dev/null +++ b/externals/fftease/MSPd.h @@ -0,0 +1,15 @@ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> + +/* for compiling under XP */ + +#ifndef PIOVERTWO +#define PIOVERTWO 1.5707963268 +#endif +#ifndef TWOPI +#define TWOPI 6.2831853072 +#endif + + diff --git a/externals/fftease/Makefile b/externals/fftease/Makefile new file mode 100644 index 000000000..0698e7c37 --- /dev/null +++ b/externals/fftease/Makefile @@ -0,0 +1,454 @@ +## Pd library template version 1.0.14 +# For instructions on how to use this template, see: +# http://puredata.info/docs/developer/MakefileTemplate +# EL removed liberty link +LIBRARY_NAME = fftease + +# add your .c source files, one object per file, to the SOURCES +# variable, help files will be included automatically, and for GUI +# objects, the matching .tcl file too +SOURCES = bthresher~.c burrow~.c cavoc~.c cavoc27~.c centerring~.c \ +codepend~.c cross~.c dentist~.c disarrain~.c disarray~.c drown~.c \ +enrich~.c ether~.c leaker~.c mindwarp~.c morphine~.c multyq~.c \ +pileup~.c pvcompand~.c pvgrain~.c pvharm~.c pvoc~.c pvtuner~.c pvwarp~.c pvwarpb~.c \ +reanimator~.c resent~.c residency~.c residency_buffer~.c schmear~.c scrape~.c \ +shapee~.c swinger~.c taint~.c thresher~.c vacancy~.c xsyn~.c + +# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will +# be included automatically +PDOBJECTS = smap.pd + +# example patches and related files, in the 'examples' subfolder +EXAMPLES = + +# manuals and related files, in the 'manual' subfolder +MANUAL = + +# if you want to include any other files in the source and binary tarballs, +# list them here. This can be anything from header files, test patches, +# documentation, etc. README.txt and LICENSE.txt are required and therefore +# automatically included +EXTRA_DIST = MSPd.h PenroseOscil.h PenroseRand.h bashfest.h fftease.h ugens.h + +# unit tests and related files here, in the 'unittests' subfolder +UNITTESTS = + + +SHARED_SOURCE = bloscbank.c convert.c fft.c fft4.c fftease_setup.c fftease_utilities.c fold.c leanconvert.c leanunconvert.c legacy.c limit_fftsize.c limited_oscbank.c makewindows.c oscbank.c overlapadd.c PenroseOscil.c PenroseRand.c power_of_two.c qsortE.c unconvert.c +SHARED_LIB = lib$(LIBRARY_NAME).$(SHARED_EXTENSION) + +#------------------------------------------------------------------------------# +# +# things you might need to edit if you are using other C libraries +# +#------------------------------------------------------------------------------# + +ALL_CFLAGS = -I"$(PD_INCLUDE)" +ALL_LDFLAGS = +SHARED_LDFLAGS = +ALL_LIBS = + + +#------------------------------------------------------------------------------# +# +# you shouldn't need to edit anything below here, if we did it right :) +# +#------------------------------------------------------------------------------# + +# these can be set from outside without (usually) breaking the build +CFLAGS = -Wall -W -g +# Skip irritating warnings: +# CFLAGS = -w -g +LDFLAGS = +LIBS = + +# get library version from meta file +LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd) + +ALL_CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"' + +PD_INCLUDE = $(PD_PATH)/include/pd +# where to install the library, overridden below depending on platform +prefix = /usr/local +libdir = $(prefix)/lib +pkglibdir = $(libdir)/pd-externals +objectsdir = $(pkglibdir) + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -p -m 644 +INSTALL_DATA = $(INSTALL) -p -m 644 +INSTALL_DIR = $(INSTALL) -p -m 755 -d + +ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \ + $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows) + +DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION) +ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION) + +UNAME := $(shell uname -s) +ifeq ($(UNAME),Darwin) + CPU := $(shell uname -p) + ifeq ($(CPU),arm) # iPhone/iPod Touch + SOURCES += $(SOURCES_iphoneos) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = iphoneos + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin + CC=$(IPHONE_BASE)/gcc + CPP=$(IPHONE_BASE)/cpp + CXX=$(IPHONE_BASE)/g++ + ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk + IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6 + OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer + ALL_CFLAGS := $(IPHONE_CFLAGS) $(ALL_CFLAGS) + ALL_LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT) + SHARED_LDFLAGS += -arch armv6 -dynamiclib -undefined dynamic_lookup $(ISYSROOT) + ALL_LIBS += -lc $(LIBS_iphoneos) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) + else # Mac OS X + SOURCES += $(SOURCES_macosx) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = macosx + PD_PATH = + OPT_CFLAGS = -ftree-vectorize +# build universal 32-bit on 10.4 and 32/64 on newer + ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8) + FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4 + else + SOURCES += $(SOURCES_iphoneos) +# Starting with Xcode 4.0, the PowerPC compiler is not installed by default + ifeq ($(wildcard /usr/llvm-gcc-4.2/libexec/gcc/powerpc*), ) + FAT_FLAGS = -arch i386 -arch x86_64 -mmacosx-version-min=10.5 + else + FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + endif + endif + ALL_CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include + # if the 'pd' binary exists, check the linking against it to aid with stripping + BUNDLE_LOADER = $(shell test ! -e $(PD_PATH)/bin/pd || echo -bundle_loader $(PD_PATH)/bin/pd) + ALL_LDFLAGS += $(FAT_FLAGS) -headerpad_max_install_names -bundle $(BUNDLE_LOADER) \ + -undefined dynamic_lookup + SHARED_LDFLAGS += $(FAT_FLAGS) -dynamiclib -undefined dynamic_lookup \ + -install_name @loader_path/$(SHARED_LIB) -compatibility_version 1 -current_version 1.0 + ALL_LIBS += -lc $(LIBS_macosx) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) +# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much + pkglibdir=$(HOME)/Library/Pd + endif +endif +# Tho Android uses Linux, we use this fake uname to provide an easy way to +# setup all this things needed to cross-compile for Android using the NDK +ifeq ($(UNAME),ANDROID) + CPU := arm + SOURCES += $(SOURCES_android) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = android + PD_PATH = /usr + NDK_BASE := /usr/local/android-ndk + NDK_PLATFORM_VERSION := 5 + NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_VERSION)/arch-arm + NDK_UNAME := $(shell uname -s | tr '[A-Z]' '[a-z]') + NDK_TOOLCHAIN_BASE=$(NDK_BASE)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/$(NDK_UNAME)-x86 + CC := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-gcc --sysroot=$(NDK_SYSROOT) + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += + LDFLAGS += -rdynamic -shared + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + LIBS += -lc $(LIBS_android) + STRIP := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-strip \ + --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),Linux) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU) + # GNU/Hurd, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU/kFreeBSD) + # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_cygwin) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = cygwin + PD_PATH = $(shell cygpath $$PROGRAMFILES)/pd + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += + ALL_LDFLAGS += -rdynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc -lpd $(LIBS_cygwin) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif +ifeq (MINGW,$(findstring MINGW,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_windows) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = windows + PD_PATH = $(shell cd "$$PROGRAMFILES/pd" && pwd) + # MinGW doesn't seem to include cc so force gcc + CC=gcc + OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -mms-bitfields + ALL_LDFLAGS += -s -shared -Wl,--enable-auto-import + SHARED_LDFLAGS += -shared + ALL_LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" \ + -lpd -lwsock32 -lkernel32 -luser32 -lgdi32 $(LIBS_windows) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif + +# in case somebody manually set the HELPPATCHES above +HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd) + +ALL_CFLAGS := $(ALL_CFLAGS) $(CFLAGS) $(OPT_CFLAGS) +ALL_LDFLAGS := $(LDFLAGS) $(ALL_LDFLAGS) +ALL_LIBS := $(LIBS) $(ALL_LIBS) + +SHARED_SOURCE ?= $(wildcard lib$(LIBRARY_NAME).c) +SHARED_HEADER ?= $(shell test ! -e $(LIBRARY_NAME).h || echo $(LIBRARY_NAME).h) +SHARED_LIB ?= $(SHARED_SOURCE:.c=.$(SHARED_EXTENSION)) +SHARED_TCL_LIB = $(wildcard lib$(LIBRARY_NAME).tcl) + +.PHONY = install libdir_install single_install install-doc install-examples install-manual install-unittests clean distclean dist etags $(LIBRARY_NAME) + +all: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) + +%.o: %.c + $(CC) $(ALL_CFLAGS) -o "$*.o" -c "$*.c" + +%.$(EXTENSION): %.o $(SHARED_LIB) + $(CC) $(ALL_LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(ALL_LIBS) $(SHARED_LIB) + chmod a-x "$*.$(EXTENSION)" + +# this links everything into a single binary file +$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o lib$(LIBRARY_NAME).o + $(CC) $(ALL_LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) \ + $(LIBRARY_NAME).o lib$(LIBRARY_NAME).o $(ALL_LIBS) + chmod a-x $(LIBRARY_NAME).$(EXTENSION) + +$(SHARED_LIB): $(SHARED_SOURCE:.c=.o) + $(CC) $(SHARED_LDFLAGS) -o $(SHARED_LIB) $(SHARED_SOURCE:.c=.o) $(ALL_LIBS) + +install: libdir_install + +# The meta and help files are explicitly installed to make sure they are +# actually there. Those files are not optional, then need to be there. +libdir_install: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) install-doc install-examples install-manual install-unittests + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES))" || (\ + $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \ + $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))) + test -z "$(strip $(SHARED_LIB))" || \ + $(INSTALL_DATA) $(SHARED_LIB) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(wildcard $(SOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(SOURCES:.c=.tcl)) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SHARED_TCL_LIB))" || \ + $(INSTALL_DATA) $(SHARED_TCL_LIB) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + +# install library linked as single binary +single_install: $(LIBRARY_NAME) install-doc install-examples install-manual install-unittests + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION) + +install-doc: + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(HELPPATCHES) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt + $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt + +install-examples: + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \ + done + +install-manual: + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \ + done + +install-unittests: + test -z "$(strip $(UNITTESTS))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/unittests && \ + for file in $(UNITTESTS); do \ + $(INSTALL_DATA) unittests/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/unittests; \ + done + +clean: + -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o) $(SHARED_SOURCE:.c=.o) + -rm -f -- $(SOURCES:.c=.$(EXTENSION)) + -rm -f -- $(LIBRARY_NAME).o + -rm -f -- $(LIBRARY_NAME).$(EXTENSION) + -rm -f -- $(SHARED_LIB) + +distclean: clean + -rm -f -- $(DISTBINDIR).tar.gz + -rm -rf -- $(DISTBINDIR) + -rm -f -- $(DISTDIR).tar.gz + -rm -rf -- $(DISTDIR) + -rm -f -- $(ORIGDIR).tar.gz + -rm -rf -- $(ORIGDIR) + + +$(DISTBINDIR): + $(INSTALL_DIR) $(DISTBINDIR) + +libdir: all $(DISTBINDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR) + $(INSTALL_DATA) $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) $(DISTBINDIR) + $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR) +# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR) + +$(DISTDIR): + $(INSTALL_DIR) $(DISTDIR) + +$(ORIGDIR): + $(INSTALL_DIR) $(ORIGDIR) + +dist: $(DISTDIR) + $(INSTALL_DATA) Makefile $(DISTDIR) + $(INSTALL_DATA) README.txt $(DISTDIR) + $(INSTALL_DATA) LICENSE.txt $(DISTDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR) + test -z "$(strip $(ALLSOURCES))" || \ + $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR) + test -z "$(strip $(wildcard $(ALLSOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(ALLSOURCES:.c=.tcl)) $(DISTDIR) + test -z "$(strip $(wildcard $(LIBRARY_NAME).c))" || \ + $(INSTALL_DATA) $(LIBRARY_NAME).c $(DISTDIR) + test -z "$(strip $(SHARED_HEADER))" || \ + $(INSTALL_DATA) $(SHARED_HEADER) $(DISTDIR) + test -z "$(strip $(SHARED_SOURCE))" || \ + $(INSTALL_DATA) $(SHARED_SOURCE) $(DISTDIR) + test -z "$(strip $(SHARED_TCL_LIB))" || \ + $(INSTALL_DATA) $(SHARED_TCL_LIB) $(DISTDIR) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR) + test -z "$(strip $(HELPPATCHES))" || \ + $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR) + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DISTDIR)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \ + done + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DISTDIR)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \ + done + test -z "$(strip $(UNITTESTS))" || \ + $(INSTALL_DIR) $(DISTDIR)/unittests && \ + for file in $(UNITTESTS); do \ + $(INSTALL_DATA) unittests/$$file $(DISTDIR)/unittests; \ + done + tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR) + +# make a Debian source package +dpkg-source: + debclean + make distclean dist + mv $(DISTDIR) $(ORIGDIR) + tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR) + rm -f -- $(DISTDIR).tar.gz + rm -rf -- $(DISTDIR) $(ORIGDIR) + cd .. && dpkg-source -b $(LIBRARY_NAME) + +etags: TAGS + +TAGS: $(wildcard $(PD_INCLUDE)/*.h) $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) + etags $(wildcard $(PD_INCLUDE)/*.h) + etags -a *.h $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) + etags -a --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" *.tcl + +showsetup: + @echo "CC: $(CC)" + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "LIBS: $(LIBS)" + @echo "ALL_CFLAGS: $(ALL_CFLAGS)" + @echo "ALL_LDFLAGS: $(ALL_LDFLAGS)" + @echo "ALL_LIBS: $(ALL_LIBS)" + @echo "PD_INCLUDE: $(PD_INCLUDE)" + @echo "PD_PATH: $(PD_PATH)" + @echo "objectsdir: $(objectsdir)" + @echo "LIBRARY_NAME: $(LIBRARY_NAME)" + @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)" + @echo "SOURCES: $(SOURCES)" + @echo "SHARED_HEADER: $(SHARED_HEADER)" + @echo "SHARED_SOURCE: $(SHARED_SOURCE)" + @echo "SHARED_LIB: $(SHARED_LIB)" + @echo "SHARED_TCL_LIB: $(SHARED_TCL_LIB)" + @echo "PDOBJECTS: $(PDOBJECTS)" + @echo "ALLSOURCES: $(ALLSOURCES)" + @echo "ALLSOURCES TCL: $(wildcard $(ALLSOURCES:.c=.tcl))" + @echo "UNAME: $(UNAME)" + @echo "CPU: $(CPU)" + @echo "pkglibdir: $(pkglibdir)" + @echo "DISTDIR: $(DISTDIR)" + @echo "ORIGDIR: $(ORIGDIR)" diff --git a/externals/fftease/PenroseOscil.c b/externals/fftease/PenroseOscil.c new file mode 100644 index 000000000..7d5814551 --- /dev/null +++ b/externals/fftease/PenroseOscil.c @@ -0,0 +1,40 @@ +#include <math.h> +#include "PenroseOscil.h" + + +t_float fftease_frequencyToIncrement( t_float samplingRate, t_float frequency, int bufferLength ) { + + return (frequency / samplingRate) * (t_float) bufferLength; +} + +void fftease_makeSineBuffer( t_float *buffer, int bufferLength ) { + + int i; + + float myTwoPi = 8. * atan(1.); + + for ( i=0; i <= bufferLength; i++ ) + *(buffer+i) = sin( myTwoPi * ((t_float) i / (t_float) bufferLength) ); + + return; +} + + +t_float fftease_bufferOscil( t_float *phase, t_float increment, t_float *buffer, + int bufferLength ) +{ + + t_float sample; + + while ( *phase > bufferLength ) + *phase -= bufferLength; + + while ( *phase < 0. ) + *phase += bufferLength; + + sample = *( buffer + (int) (*phase) ); + + *phase += increment; + + return sample; +} diff --git a/externals/fftease/PenroseOscil.h b/externals/fftease/PenroseOscil.h new file mode 100644 index 000000000..737975baa --- /dev/null +++ b/externals/fftease/PenroseOscil.h @@ -0,0 +1,5 @@ +#include "fftease.h" + +t_float frequencyToIncrement( t_float samplingRate, t_float frequency, int bufferLength ); +void makeSineBuffer( t_float *buffer, int bufferLength ); +t_float bufferOscil( t_float *phase, t_float increment, t_float *buffer, int bufferLength ); diff --git a/externals/fftease/PenroseRand.c b/externals/fftease/PenroseRand.c new file mode 100644 index 000000000..e086a6e93 --- /dev/null +++ b/externals/fftease/PenroseRand.c @@ -0,0 +1,13 @@ +#include "PenroseRand.h" + +float fftease_rrand(int *seed) +{ + int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; + return((float)i/16384. - 1.); +} + +float fftease_prand(int *seed) +{ + int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; + return((float)i/32768.); +} diff --git a/externals/fftease/PenroseRand.h b/externals/fftease/PenroseRand.h new file mode 100644 index 000000000..89e0f44fd --- /dev/null +++ b/externals/fftease/PenroseRand.h @@ -0,0 +1,3 @@ + +float fftease_rrand(int *seed); +float fftease_prand(int *seed); diff --git a/externals/fftease/README.txt b/externals/fftease/README.txt new file mode 100644 index 000000000..75015e0ba --- /dev/null +++ b/externals/fftease/README.txt @@ -0,0 +1,49 @@ +About FFTease 3.0 + +FFTease is a collection of objects designed to facilitate spectral sound +processing in Max. The collection was designed by Eric Lyon and +Christopher Penrose in 1999, and has been maintained by Eric Lyon since +2003. + + +Installation + + +The contents of "fftease32-externals" were compiled on Mac OSX 10.9.3 +and should work on Intel-based Mac computers. For other Unix-based +computers, just type 'make' to build executables appropriate for your +computer. Then type 'perl collect.pl' to collect all the externals to +the "fftease32-externals" folder. Finally, move "fftease32-externals" +and "fftease32-help" to a Pd-accessible location. + + +Performance Considerations + + +The default Pd audio buffer settings for both I/O vector size and signal +vector size will work fine for FFT sizes up to around 4096 or so. For +larger FFT sizes, adjusting the Pd signal vector size and I/O vector +size upward can dramatically improve performance. With larger FFT sizes, +the reported CPU load may fluctuate. This is because a large FFT is +being performed only once for several vectors worth of samples. The +default FFT size is 1024, and the default overlap factor is 8. The +maximum FFT size is 1073741824. Let me know if you find a computer +powerful enough to compute the maximum FFT size in real-time. + + +For Coders + + +Full source code is included, so that intrepid coders may extend +FFTease, or even code up a 64-bit version. (Note that current 64-bit +versions of Pd compute all DSP with 32-bit resolution, thus a 64-bit +port does not yet seem advisable.) The FFTease code is distributed under +the MIT license to facilitate deployment to any combination of free, +open-source, commercial, or closed-source projects. + +Have fun! + +Eric Lyon +ericlyon@vt.edu +Blacksburg, Virginia +July, 2014 \ No newline at end of file diff --git a/externals/fftease/bloscbank.c b/externals/fftease/bloscbank.c new file mode 100644 index 000000000..f09185406 --- /dev/null +++ b/externals/fftease/bloscbank.c @@ -0,0 +1,34 @@ + +#include "fftease.h" + +void fftease_bloscbank( t_float *S, t_float *O, int D, t_float iD, t_float *lf, t_float *la, t_float *index, t_float *tab, + int len, t_float synt, int lo, int hi ) +{ + int amp,freq,chan, i; + + t_float a,ainc,f,finc,address; + + for ( chan = lo; chan < hi; chan++ ) { + + freq = ( amp = ( chan << 1 ) ) + 1; + if ( S[amp] > synt ){ + finc = ( S[freq] - ( f = lf[chan] ) )* iD; + ainc = ( S[amp] - ( a = la[chan] ) )* iD; + address = index[chan]; + for ( i = 0; i < D ; i++ ) { + O[i] += a*tab[ (int) address ]; + + address += f; + while ( address >= len ) + address -= len; + while ( address < 0 ) + address += len; + a += ainc; + f += finc; + } + lf[chan] = S[freq]; + la[chan] = S[amp]; + index[chan] = address; + } + } +} \ No newline at end of file diff --git a/externals/fftease/bthresher~.c b/externals/fftease/bthresher~.c new file mode 100644 index 000000000..748aced62 --- /dev/null +++ b/externals/fftease/bthresher~.c @@ -0,0 +1,486 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *bthresher_class; + +#define OBJECT_NAME "bthresher~" + +typedef struct _bthresher +{ + t_object x_obj; + float x_f; + t_fftease *fft; + /* bthresher vars */ + t_float *move_threshold; + t_float *composite_frame ; + int *frames_left; + int max_hold_frames; + t_float max_hold_time; + int first_frame; + t_float *damping_factor ; + t_float thresh_scalar; + t_float damp_scalar; + short thresh_connected; + short damping_connected; + void *list_outlet; + void *misc_outlet; + t_atom *list_data; + short mute; + short bypass; + t_float init_thresh; + t_float init_damping; + t_float tadv; + short inf_hold; +} t_bthresher; + + +void *bthresher_new(t_symbol *s, int argc, t_atom *argv); +void bthresher_dsp(t_bthresher *x, t_signal **sp); +t_int *bthresher_perform(t_int *w); +void bthresher_mute(t_bthresher *x, t_float f); +void bthresher_fftinfo(t_bthresher *x); +void bthresher_free(t_bthresher *x); +void bthresher_bin(t_bthresher *x, t_float bin_num, t_float threshold, t_float damper); +void bthresher_rdamper(t_bthresher *x, t_float min, t_float max ); +void bthresher_rthreshold(t_bthresher *x, t_float min, t_float max); +void bthresher_dump(t_bthresher *x ); +void bthresher_list (t_bthresher *x, t_symbol *msg, short argc, t_atom *argv); +void bthresher_init(t_bthresher *x); +t_float bthresher_boundrand(t_float min, t_float max); +void bthresher_allthresh(t_bthresher *x, t_float f); +void bthresher_alldamp(t_bthresher *x, t_float f); +void bthresher_inf_hold(t_bthresher *x, t_float f); +void bthresher_max_hold(t_bthresher *x, t_float f); +void do_bthresher(t_bthresher *x); +void bthresher_oscbank(t_bthresher *x, t_float flag); +void bthresher_synthresh(t_bthresher *x, t_float thresh); +void bthresher_transpose(t_bthresher *x, t_float tf); + +void bthresher_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("bthresher~"), (t_newmethod)bthresher_new, + (t_method)bthresher_free,sizeof(t_bthresher), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_bthresher, x_f); + class_addmethod(c,(t_method)bthresher_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)bthresher_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)bthresher_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_bin, gensym("bin"), A_FLOAT, A_FLOAT, A_FLOAT, 0); + class_addmethod(c,(t_method)bthresher_rdamper, gensym("rdamper"), A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod(c,(t_method)bthresher_rthreshold, gensym("rthreshold"), A_DEFFLOAT, A_DEFFLOAT, 0); + class_addmethod(c,(t_method)bthresher_dump,gensym("dump"),0); + class_addmethod(c,(t_method)bthresher_list,gensym("list"),A_GIMME,0); + class_addmethod(c,(t_method)bthresher_alldamp,gensym("alldamp"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_allthresh,gensym("allthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_inf_hold,gensym("inf_hold"),A_FLOAT,0); + class_addmethod(c,(t_method)bthresher_max_hold,gensym("max_hold"),A_FLOAT,0); + bthresher_class = c; + fftease_announce(OBJECT_NAME); +} + + +void bthresher_fftinfo( t_bthresher *x ) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} + +void bthresher_free( t_bthresher *x ){ + t_fftease *fft = x->fft; + fftease_free(fft); + /* external-specific memory */ + free(x->composite_frame); + free(x->frames_left); + free(x->move_threshold); + free(x->damping_factor); + free(x->list_data); +} + +void bthresher_max_hold(t_bthresher *x, t_float f) +{ + if(f<=0) + return; + x->max_hold_time = f * .001; + x->max_hold_frames = x->max_hold_time / x->tadv; +} + +void bthresher_inf_hold(t_bthresher *x, t_float f) +{ + x->inf_hold = (int)f; +} + +void bthresher_allthresh(t_bthresher *x, t_float f) +{ + int i; + t_fftease *fft = x->fft; + //post("thresh %f",f); + for(i=0;i < fft->N2+1;i++) + x->move_threshold[i] = f; +} + +void bthresher_alldamp(t_bthresher *x, t_float f) +{ + int i; + t_fftease *fft = x->fft; + + //post("damp %f",f); + for(i=0;i < fft->N2+1;i++) + x->damping_factor[i] = f; +} + +void bthresher_mute(t_bthresher *x, t_float f){ + x->mute = f; +} + + +void bthresher_list (t_bthresher *x, t_symbol *msg, short argc, t_atom *argv) { + int i, bin, idiv; + t_float fdiv; + t_float *damping_factor = x->damping_factor; + t_float *move_threshold = x->move_threshold; + + // post("reading %d elements", argc); + idiv = fdiv = (t_float) argc / 3.0 ; + if( fdiv - idiv > 0.0 ) { + post("list must be in triplets"); + return; + } + + for( i = 0; i < argc; i += 3 ) { + bin = atom_getintarg(i,argc,argv); + damping_factor[bin] = atom_getfloatarg(i+1,argc,argv); + move_threshold[bin] = atom_getfloatarg(i+2,argc,argv); + + } +} + +void bthresher_dump (t_bthresher *x) { + + t_atom *list_data = x->list_data; + t_float *damping_factor = x->damping_factor; + t_float *move_threshold = x->move_threshold; + + int i,j, count; + + for( i = 0, j = 0; i < x->fft->N2 * 3 ; i += 3, j++ ) { + + SETFLOAT(list_data+i,(t_float)j); + SETFLOAT(list_data+(i+1),damping_factor[j]); + SETFLOAT(list_data+(i+2),move_threshold[j]); + } + + count = x->fft->N2 * 3; + outlet_list(x->list_outlet,0,count,list_data); + + return; +} + +void *bthresher_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + + t_bthresher *x = (t_bthresher *)pd_new(bthresher_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->list_outlet = outlet_new(&x->x_obj, gensym("list")); + + + x->fft = (t_fftease *) calloc( 1, sizeof(t_fftease) ); + + fft = x->fft; + fft->initialized = 0; + x->init_thresh = 0.1; + x->init_damping = 0.99; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + + + +void bthresher_transpose(t_bthresher *x, t_float tf) +{ + x->fft->P = (t_float) tf; +} + +void bthresher_synthresh(t_bthresher *x, t_float thresh) +{ + x->fft->synt = (t_float) thresh; +} + +void bthresher_init(t_bthresher *x) +{ + int i; + t_fftease *fft = x->fft; + + short initialized = fft->initialized; + fftease_init(fft); + + if(!initialized){ + x->first_frame = 1; + x->max_hold_time = 60.0 ; + x->thresh_connected = 0; + x->damping_connected = 0; + x->thresh_scalar = 1; + x->damp_scalar = 1; + x->mute = 0; + x->bypass = 0; + x->inf_hold = 0; + x->composite_frame = (t_float *) calloc(fft->N + 2, sizeof(t_float)); + x->frames_left = (int *) calloc(fft->N + 2, sizeof(int)); + + + // TRIPLETS OF bin# damp_factor threshold + x->list_data = (t_atom *) calloc((fft->N2 + 1) * 3, sizeof(t_atom)); + x->move_threshold = (t_float *) calloc((fft->N2+1), sizeof(t_float)); + x->damping_factor = (t_float *) calloc((fft->N2+1), sizeof(t_float)); + + for(i = 0; i < fft->N2+1; i++) { + x->move_threshold[i] = x->init_thresh; + x->damping_factor[i] = x->init_damping; + } + } else { + x->list_data = (t_atom *) realloc((void *)x->list_data, (fft->N2 + 1) * 3 * sizeof(t_atom)); + x->move_threshold = (t_float *) realloc((void *)x->move_threshold, (fft->N2+1) * sizeof(t_float)); + x->damping_factor = (t_float *) realloc((void *)x->damping_factor, (fft->N2+1) * sizeof(t_float)); + } + // NEED TO HANDLE REALLOC CASE!!! + + x->tadv = (t_float) fft->D / (t_float) fft->R; + x->max_hold_frames = x->max_hold_time / x->tadv; +} + +void bthresher_version(void) +{ + fftease_version(OBJECT_NAME); +} + +void bthresher_rdamper(t_bthresher *x, t_float min, t_float max) +{ + int i; + + for( i = 0; i < x->fft->N2; i++ ) { + x->damping_factor[i] = bthresher_boundrand(min, max); + } +} + +void bthresher_rthreshold( t_bthresher *x, t_float min, t_float max ) +{ + int i; + for( i = 0; i < x->fft->N2; i++ ) { + x->move_threshold[i] = bthresher_boundrand(min, max); + } +} + + +void bthresher_bin(t_bthresher *x, t_float bin_num, t_float damper, t_float threshold) +{ + int bn = (int) bin_num; + if( bn >= 0 && bn < x->fft->N2 ){ + // post("setting %d to %f %f",bn,threshold,damper); + x->move_threshold[bn] = threshold; + x->damping_factor[bn] = damper; + } else { + post("bthresher~: %d is out of range", bn); + } +} + + +void do_bthresher(t_bthresher *x) +{ + t_fftease *fft = x->fft; + + int N = fft->N; + + t_float *channel = fft->channel; + t_float *damping_factor = x->damping_factor; + t_float *move_threshold = x->move_threshold; + t_float *composite_frame = x->composite_frame; + int max_hold_frames = x->max_hold_frames; + int *frames_left = x->frames_left; + t_float thresh_scalar = x->thresh_scalar; + t_float damp_scalar = x->damp_scalar; + short inf_hold = x->inf_hold; + int i, j; + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_convert(fft); + if( x->first_frame ){ + for ( i = 0; i < N+2; i++ ){ + composite_frame[i] = channel[i]; + x->frames_left[i] = max_hold_frames; + } + x->first_frame = 0; + } + else { + if( thresh_scalar < .999 || thresh_scalar > 1.001 || damp_scalar < .999 || damp_scalar > 1.001 ) { + for(i = 0, j = 0; i < N+2; i += 2, j++ ){ + if( fabs( composite_frame[i] - channel[i] ) > move_threshold[j] * thresh_scalar|| frames_left[j] <= 0 ){ + composite_frame[i] = channel[i]; + composite_frame[i+1] = channel[i+1]; + frames_left[j] = max_hold_frames; + } + else { + if(!inf_hold){ + --(frames_left[j]); + } + composite_frame[i] *= damping_factor[j] * damp_scalar; /* denormals protection */ + if( composite_frame[i] < 0.000001 ) + composite_frame[i] = 0.0; + } + } + + } + else { + for( i = 0, j = 0; i < N+2; i += 2, j++ ){ + if( fabs( composite_frame[i] - channel[i] ) > move_threshold[j] || frames_left[j] <= 0 ){ + composite_frame[i] = channel[i]; + composite_frame[i+1] = channel[i+1]; + frames_left[j] = max_hold_frames; + } else { + if(!inf_hold){ + --(frames_left[j]); + } + // composite_frame[i] *= damping_factor[j]; // was a bug here ?? + composite_frame[i] *= damping_factor[j] * damp_scalar; + if( composite_frame[i] < 0.000001 ) /* denormals protection */ + composite_frame[i] = 0.0; + } + } + } + } + // use memcopy + for(i = 0; i < N+2; i++){ + channel[i] = composite_frame[i]; + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); + } +} + +void bthresher_oscbank(t_bthresher *x, t_float flag) +{ + x->fft->obank_flag = (short) flag; +} + +t_int *bthresher_perform(t_int *w) +{ + int i,j; + t_bthresher *x = (t_bthresher *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *inthresh = (t_float *)(w[3]); + t_float *damping = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *input = fft->input; + t_float *output = fft->output; + int Nw = fft->Nw; + t_float mult = fft->mult; + int D = fft->D; + + if(x->mute) { + for(i=0; i < MSPVectorSize; i++){ + MSPOutputVector[i] = 0.0; + } + return w+6; + } + + x->thresh_scalar = *inthresh; + x->damp_scalar = *damping; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_bthresher(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_bthresher(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_bthresher(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + + +void bthresher_dsp(t_bthresher *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + bthresher_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(bthresher_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} + +t_float bthresher_boundrand( t_float min, t_float max) { + t_float frand; + frand = (t_float) (rand() % 32768)/ 32768.0; + return (min + frand * (max-min) ); +} + diff --git a/externals/fftease/burrow~.c b/externals/fftease/burrow~.c new file mode 100644 index 000000000..c736a6824 --- /dev/null +++ b/externals/fftease/burrow~.c @@ -0,0 +1,390 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *burrow_class; + +#define OBJECT_NAME "burrow~" + +typedef struct _burrow +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; // for cross synthesis use + int invert; + t_float threshold; + t_float multiplier; + short mute; + short bypass; +} t_burrow; + +void *burrow_new(t_symbol *s, int argc, t_atom *argv); +void burrow_dsp(t_burrow *x, t_signal **sp); +t_int *burrow_perform(t_int *w); +t_int *offset_perform(t_int *w); +t_int *burrow_perform(t_int *w); +void burrow_assist(t_burrow *x, void *b, long m, long a, char *s); +void burrow_float(t_burrow *x, t_floatarg myFloat); +void burrow_init(t_burrow *x); +void burrow_free(t_burrow *x); +void burrow_invert(t_burrow *x, t_floatarg toggle); +void burrow_mute(t_burrow *x, t_floatarg toggle); +void burrow_fftinfo(t_burrow *x); +void burrow_tilde_setup(void); +void burrow_winfac(t_burrow *x, t_floatarg f); +void do_burrow(t_burrow *x); +void burrow_bypass(t_burrow *x, t_floatarg toggle); +void burrow_perform64(t_burrow *x, t_object *dsp64, t_float **ins, + long numins, t_float **outs,long numouts, long vectorsize, + long flags, void *userparam); +void burrow_dsp64(t_burrow *x, t_object *dsp64, short *count, t_float samplerate, long maxvectorsize, long flags); + +void burrow_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("burrow~"), (t_newmethod)burrow_new, + (t_method)burrow_free,sizeof(t_burrow), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_burrow, x_f); + class_addmethod(c,(t_method)burrow_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)burrow_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)burrow_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)burrow_invert,gensym("invert"), A_FLOAT, 0); + burrow_class = c; + fftease_announce(OBJECT_NAME); +} + +void burrow_free(t_burrow *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); +} + +void burrow_invert(t_burrow *x, t_floatarg toggle) +{ + x->invert = (short)toggle; +} + +void burrow_mute(t_burrow *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void burrow_bypass(t_burrow *x, t_floatarg toggle) +{ + x->bypass = (short)toggle; +} + +void burrow_winfac(t_burrow *x, t_floatarg f) +{ + x->fft->winfac = (int) f; + x->fft2->winfac = (int) f; + burrow_init(x); +} + + +void burrow_fftinfo( t_burrow *x ) +{ + fftease_fftinfo(x->fft, OBJECT_NAME); +} + +void burrow_init(t_burrow *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->mute = 0; + x->invert = 0; + } +} + +void *burrow_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_burrow *x = (t_burrow *) pd_new(burrow_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1, sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1, sizeof(t_fftease)); + + fft = x->fft; + fft2 = x->fft2; + fft->initialized = fft2->initialized = 0; + x->threshold = 0.0; + x->multiplier = 0.01; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +t_int *burrow_perform(t_int *w) +{ + /* get our inlets and outlets */ + t_burrow *x = (t_burrow *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *flt_threshold = (t_float *)(w[4]); + t_float *flt_multiplier = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + t_float mult = fft->mult; + + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + + int + i,j, + invert = 0, + threshold = 1., + multiplier = 1.; + t_float + *inputOne, + *inputTwo, + *bufferOne, + *bufferTwo, + *channelOne, + *channelTwo; + + /* dereference structure */ + + inputOne = fft->input; + inputTwo = fft2->input; + bufferOne = fft->buffer; + bufferTwo = fft2->buffer; + channelOne = fft->channel; + channelTwo = fft2->channel; + multiplier = x->multiplier; + threshold = x->threshold; + invert = x->invert; + + mult = fft->mult; + x->threshold = *flt_threshold; + x->multiplier = *flt_multiplier; + + /* save some CPUs if muted */ + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ + MSPOutputVector[i] = 0.0; + } + return w+7; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_burrow(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_burrow(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_burrow(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void do_burrow(t_burrow *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int N2 = fft->N2; + float a1, b1, + a2, b2; + int even, odd; + + /* dereference structure */ + + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + + t_float *channelOne = fft->channel; + t_float *channelTwo = fft2->channel; + t_float multiplier = x->multiplier; + t_float threshold = x->threshold; + + int invert = x->invert; + + + /* apply hamming window and fold our window buffer into the fft buffer */ + + fftease_fold(fft); + fftease_fold(fft2); + + + /* do an fft */ + + fftease_rdft(fft, 1); + fftease_rdft(fft2, 1); + + if (invert) { + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + + /* use simple threshold from second signal to trigger filtering */ + + if ( *(channelTwo+even) < threshold ) + *(channelOne+even) *= multiplier; + + } + } + + else { + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + + /* use simple threshold from second signal to trigger filtering */ + + if ( *(channelTwo+even) > threshold ) + *(channelOne+even) *= multiplier; + } + } + + /* convert back to complex form, read for the inverse fft */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + + + /* do an inverse fft */ + + fftease_rdft(fft, -1); + + /* dewindow our result */ + + fftease_overlapadd(fft); + +} + +void burrow_dsp(t_burrow *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + burrow_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(burrow_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec); + } +} diff --git a/externals/fftease/cavoc27~.c b/externals/fftease/cavoc27~.c new file mode 100644 index 000000000..e09eb01ba --- /dev/null +++ b/externals/fftease/cavoc27~.c @@ -0,0 +1,633 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *cavoc27_class; + +#define OBJECT_NAME "cavoc27~" + +/* NOTE THIS IS A MORE COMPLEX CA WITH 3 DIFFERENT STATES */ + +typedef struct _cavoc27 +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float *ichannel; //for interpolation + t_float *tmpchannel; // for spectrum capture + t_float frame_duration; + int max_bin; + t_float fundamental; + t_float *last_frame; + short left; + short right; + short center; + short *rule; + + t_float start_breakpoint; + int hold_frames; + int frames_left; + int set_count; + short interpolate_flag; + short capture_flag; + short capture_lock; + void *list_outlet; + t_atom *list_data; + short mute; + + short external_trigger; + short trigger_value; // set to 1 when a bang is received + t_float topfreq; // highest to synthesize - Nyquist by default + t_float bottomfreq; + t_float *freqs; + t_float *amps; + short manual_mode; // respond to outside + short freeze; // flag to maintain current spectrum + long fftsize_attr; + long overlap_attr; + t_float density; + t_float hold_time; //hold time in seconds +} t_cavoc27; + +void *cavoc27_new(t_symbol *s, int argc, t_atom *argv); +void cavoc27_dsp(t_cavoc27 *x, t_signal **sp); +t_int *cavoc27_perform(t_int *w); +void cavoc27_assist(t_cavoc27 *x, void *b, long m, long a, char *s); +void cavoc27_free( t_cavoc27 *x); +int cavoc27_apply_rule( short left, short right, short center, short *rule); +void cavoc27_rule (t_cavoc27 *x, t_symbol *msg, short argc, t_atom *argv); +void cavoc27_density (t_cavoc27 *x, t_floatarg density); +void cavoc27_hold_time (t_cavoc27 *x, t_floatarg hold_time); +void cavoc27_interpolate (t_cavoc27 *x, t_floatarg interpolate); +void cavoc27_capture_spectrum (t_cavoc27 *x, t_floatarg flag ); +void cavoc27_capture_lock (t_cavoc27 *x, t_floatarg toggle ); +void cavoc27_retune (t_cavoc27 *x, t_floatarg min, t_floatarg max); +void cavoc27_mute (t_cavoc27 *x, t_floatarg toggle); +void cavoc27_init(t_cavoc27 *x); +void cavoc27_rand_set_spectrum(t_cavoc27 *x); +void cavoc27_rand_set_rule(t_cavoc27 *x); +void cavoc27_fftinfo(t_cavoc27 *x); +void cavoc27_oscbank(t_cavoc27 *x, t_floatarg flag); +void cavoc27_transpose (t_cavoc27 *x, t_floatarg pfac); +void cavoc27_noalias(t_cavoc27 *x, t_floatarg flag); +void cavoc27_manual(t_cavoc27 *x, t_floatarg tog); +void cavoc27_trigger(t_cavoc27 *x); +void cavoc27_freeze(t_cavoc27 *x, t_floatarg tog); + +void cavoc27_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("cavoc27~"), (t_newmethod)cavoc27_new, + (t_method)cavoc27_free,sizeof(t_cavoc27), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_cavoc27, x_f); + class_addmethod(c,(t_method)cavoc27_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)cavoc27_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)cavoc27_rule,gensym("rule"),A_GIMME,0); + class_addmethod(c,(t_method)cavoc27_interpolate,gensym("interpolate"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_retune,gensym("retune"),A_FLOAT,A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_capture_spectrum,gensym("capture_spectrum"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_noalias,gensym("noalias"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_manual,gensym("manual"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_freeze,gensym("freeze"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_trigger,gensym("trigger"),0); + class_addmethod(c,(t_method)cavoc27_density,gensym("density"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc27_hold_time,gensym("hold_time"),A_FLOAT,0); + cavoc27_class = c; + fftease_announce(OBJECT_NAME); +} + +void cavoc27_rand_set_rule(t_cavoc27 *x) +{ + int i; + float rval; + for( i = 0; i < 27; i++ ){ + rval = fftease_randf(0.0,1.0); + if( rval < .333 ) + x->rule[i] = 0; + else if(rval < .666 ) + x->rule[i] = 1; + else x->rule[i] = 2; + } +} + +void cavoc27_freeze(t_cavoc27 *x, t_floatarg tog) +{ + x->freeze = (short) tog; +} + +void cavoc27_manual(t_cavoc27 *x, t_floatarg tog) +{ + x->manual_mode = (short) tog; +} + +void cavoc27_trigger(t_cavoc27 *x) +{ + x->external_trigger = 1; +} + + +void cavoc27_retune(t_cavoc27 *x, t_floatarg min, t_floatarg max) +{ + int i; + t_fftease *fft = x->fft; + t_float *tmpchannel = x->tmpchannel; + t_float *last_frame = x->last_frame; + if( max <= 0 || min <= 0 || min > max ){ + error("bad values for min and max multipliers"); + return; + } + if( min < .1 ) + min = 0.1; + if( max > 2.0 ) + max = 2.0; + for( i = 1; i < fft->N + 1; i += 2 ){ + last_frame[i] = tmpchannel[i] = fft->c_fundamental * (float) (i / 2) * fftease_randf(min, max); + } + +} + +void cavoc27_transpose (t_cavoc27 *x, t_floatarg pfac) +{ + t_fftease *fft = x->fft; + fft->P = (float) pfac; + fft->pitch_increment = fft->P*fft->L/fft->R; +} + +void cavoc27_mute (t_cavoc27 *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + + +void cavoc27_interpolate(t_cavoc27 *x, t_floatarg flag) +{ + x->interpolate_flag = (short) flag; +} + +void cavoc27_capture_spectrum(t_cavoc27 *x, t_floatarg flag ) +{ + x->capture_lock = (short)flag; + post("capture flag: %d", x->capture_lock); +} + +void cavoc27_capture_lock(t_cavoc27 *x, t_floatarg flag ) +{ + x->capture_lock = (short)flag; +} + +void cavoc27_rule (t_cavoc27 *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + short *rule = x->rule; + if( argc != 27 ){ + error("the rule must be size 18"); + return; + } + + for( i = 0; i < 27; i++ ){ + rule[i] = (short) atom_getfloatarg( i, argc, argv); + } +} + +void cavoc27_free( t_cavoc27 *x ){ + fftease_free(x->fft); + free(x->fft); + free(x->ichannel); + free(x->tmpchannel); + free(x->last_frame); + free(x->rule); +} + +void *cavoc27_new(t_symbol *s, int argc, t_atom *argv) +{ +t_fftease *fft; + + t_cavoc27 *x = (t_cavoc27 *)pd_new(cavoc27_class); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1, sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->hold_time = 1000.0; + x->density = 0.1; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + x->freeze = 0; + x->start_breakpoint = 1.0 - x->density; + fft->obank_flag = 0; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ x->density = atom_getfloatarg(2, argc, argv); } + if(argc > 3){ x->hold_time = atom_getfloatarg(3, argc, argv); } + return x; +} + +void cavoc27_noalias(t_cavoc27 *x, t_floatarg flag) +{ + x->fft->noalias = (short) flag; +} + +void cavoc27_oscbank(t_cavoc27 *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void cavoc27_fftsize(t_cavoc27 *x, t_floatarg f) +{ + x->fft->N = (int) f; + cavoc27_init(x); +} + +void cavoc27_overlap(t_cavoc27 *x, t_floatarg f) +{ + x->fft->overlap = (int) f; + cavoc27_init(x); +} + +void cavoc27_winfac(t_cavoc27 *x, t_floatarg f) +{ + x->fft->winfac = (int) f; + cavoc27_init(x); +} + +void cavoc27_fftinfo(t_cavoc27 *x) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); + post("frames left %d", x->frames_left); + post("no alias: %d", x->fft->noalias); +} + + +void cavoc27_init(t_cavoc27 *x) +{ + int i; + t_fftease *fft = x->fft; + short initialized = fft->initialized; + fftease_init(fft); + if(! fft->R ){ + error("cavoc27~: zero sampling rate!"); + return; + } + x->frame_duration = (float)fft->D/(float) fft->R; + x->hold_frames = (int) (x->hold_time/x->frame_duration); + x->frames_left = x->hold_frames; + x->trigger_value = 0; + x->set_count = 0; + + if(!initialized){ + srand(time(0)); + x->interpolate_flag = 0; + x->capture_lock = 0; + + x->mute = 0; + + x->ichannel = (t_float *) calloc((fft->N+2), sizeof(t_float)); + x->tmpchannel = (t_float *) calloc((fft->N+2), sizeof(t_float)); + x->last_frame = (t_float *) calloc((fft->N+2), sizeof(t_float)); + x->rule = (short *) calloc(27, sizeof(short)); + } + else { + x->ichannel = (t_float *)realloc(x->ichannel,(fft->N+2)*sizeof(t_float)); + x->tmpchannel = (t_float *)realloc(x->tmpchannel,(fft->N+2)*sizeof(t_float)); + x->last_frame = (t_float *)realloc(x->last_frame,(fft->N+2)*sizeof(t_float)); + } + if(x->frame_duration != 0){ + x->hold_frames = (int) ( (x->hold_time/1000.0) / x->frame_duration); + } else { + post("%s: zero FFT frame duration", OBJECT_NAME); + } + if( x->hold_frames < 1 ) + x->hold_frames = 1; + + cavoc27_rand_set_rule(x); + cavoc27_rand_set_spectrum(x); + for( i = 0; i < fft->N+2; i++ ){ + x->last_frame[i] = fft->channel[i]; + } +} + +void cavoc27_rand_set_spectrum(t_cavoc27 *x) +{ + int i; + float rval; + t_fftease *fft = x->fft; + t_float *channel = x->tmpchannel; + //set spectrum + + for( i = 0; i < fft->N2 + 1; i++ ){ + if( fftease_randf(0.0, 1.0) > x->start_breakpoint){ + rval = fftease_randf(0.0, 1.0); + if( rval < 0.5 ){ + channel[ i * 2 ] = 1; + } + else { + channel[ i * 2 ] = 2; + } + ++(x->set_count); + } else { + channel[ i * 2 ] = 0; + } + channel[ i * 2 + 1 ] = fft->c_fundamental * (float) i * fftease_randf(.9,1.1); + } +} + +void do_cavoc27(t_cavoc27 *x) +{ + t_fftease *fft = x->fft; + int i; + int frames_left = x->frames_left; + + int N = fft->N; + t_float *tmpchannel = x->tmpchannel; + t_float *ichannel = x->ichannel; + + int hold_frames = x->hold_frames; + short *rule = x->rule; + short left = x->left; + short right = x->right; + short center = x->center; + t_float *last_frame = x->last_frame; + t_float frak; + short manual_mode = x->manual_mode; + short trigger; + short interpolate_flag = x->interpolate_flag; + t_float *channel = fft->channel; + + if( manual_mode ){ + trigger = x->external_trigger; + } else { + trigger = 0; + } + + if( x->capture_flag || (x->capture_lock && ! x->freeze)) { + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_convert(fft); + for( i = 1; i < fft->N+1; i += 2){ + tmpchannel[i] = channel[i]; + } + } + if( ! manual_mode ){ + if( --frames_left <= 0 ){ + trigger = 1; + } + } + if(trigger && ! x->freeze){ + for( i = 0; i < fft->N+1; i++ ){ + last_frame[i] = tmpchannel[i]; + } + frames_left = hold_frames; + for( i = 2; i < fft->N; i+=2 ){ + left = last_frame[ i - 2 ]; + center = last_frame[i] ; + right = last_frame[i+2]; + tmpchannel[i] = cavoc27_apply_rule(left, right, center, rule ); + } + // boundary cases + center = last_frame[0]; + right = last_frame[2]; + left = last_frame[N]; + tmpchannel[0] = cavoc27_apply_rule(left, right, center, rule ); + + center = last_frame[N]; + right = last_frame[0]; + left = last_frame[N - 2]; + tmpchannel[N] = cavoc27_apply_rule(left, right, center, rule ); + x->external_trigger = trigger = 0 ; + } + if( interpolate_flag && ! x->freeze){ + frak = 1.0 - ((float) frames_left / (float) hold_frames); + + for( i = 0; i <N+2; i += 2 ){ + ichannel[i] = last_frame[i] + frak * ( tmpchannel[i] - last_frame[i] ); + ichannel[i+1] = last_frame[i+1]; + } + for( i = 0; i < N+2; i++ ){ + channel[i] = ichannel[i]; + } + } else { + for( i = 0; i < N+2; i++){ + channel[i] = tmpchannel[i]; + } + } + if(x->freeze){ + for( i = 0; i < N+2; i++){ + channel[i] = tmpchannel[i]; + } + } + + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft, -1); + fftease_overlapadd(fft); + } + + x->frames_left = frames_left; + +} + +t_int *cavoc27_perform(t_int *w) +{ + int i,j; + + //////////// + t_cavoc27 *x = (t_cavoc27 *) (w[1]); + t_float *MSPInputVector = (t_float *) (w[2]); + t_float *MSPOutputVector = (t_float *) (w[3]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+4; + } + if(fft->obank_flag){ + mult *= FFTEASE_OSCBANK_SCALAR; + } + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + do_cavoc27(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + do_cavoc27(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + do_cavoc27(x); + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+4; +} + +int cavoc27_apply_rule( short left, short right, short center, short *rule){ + + if( left == 0 && center == 0 && right == 0 ) + return rule[0]; + if( left == 1 && center == 0 && right == 1 ) + return rule[1]; + if( left == 1 && center == 0 && right == 0 ) + return rule[2]; + if( left == 0 && center == 0 && right == 1 ) + return rule[3]; + if( left == 2 && center == 0 && right == 2 ) + return rule[4]; + if( left == 2 && center == 0 && right == 0 ) + return rule[5]; + if( left == 0 && center == 0 && right == 2 ) + return rule[6]; + if( left == 2 && center == 0 && right == 1 ) + return rule[7]; + if( left == 1 && center == 0 && right == 2 ) + return rule[8]; + + if( left == 0 && center == 1 && right == 0 ) + return rule[9]; + if( left == 1 && center == 1 && right == 1 ) + return rule[10]; + if( left == 1 && center == 1 && right == 0 ) + return rule[11]; + if( left == 0 && center == 1 && right == 1 ) + return rule[12]; + if( left == 2 && center == 1 && right == 2 ) + return rule[13]; + if( left == 2 && center == 1 && right == 0 ) + return rule[14]; + if( left == 0 && center == 1 && right == 2 ) + return rule[15]; + if( left == 2 && center == 1 && right == 1 ) + return rule[16]; + if( left == 1 && center == 1 && right == 2 ) + return rule[17]; + + if( left == 0 && center == 2 && right == 0 ) + return rule[18]; + if( left == 1 && center == 2 && right == 1 ) + return rule[19]; + if( left == 1 && center == 2 && right == 0 ) + return rule[20]; + if( left == 0 && center == 2 && right == 1 ) + return rule[21]; + if( left == 2 && center == 2 && right == 2 ) + return rule[22]; + if( left == 2 && center == 2 && right == 0 ) + return rule[23]; + if( left == 0 && center == 2 && right == 2 ) + return rule[24]; + if( left == 2 && center == 2 && right == 1 ) + return rule[25]; + if( left == 1 && center == 2 && right == 2 ) + return rule[26]; + return 0; //should never happen +} + + +void cavoc27_density(t_cavoc27 *x, t_floatarg density) +{ + int i; + t_fftease *fft = x->fft; + t_float *channel = x->tmpchannel; + + if( density < 0.0001 ){ + density = .0001; + } else if( density > .9999 ){ + density = 1.0; + } + x->density = density; + x->start_breakpoint = 1.0 - x->density; + for( i = 0; i < fft->N2 + 1; i++ ){ + if( fftease_randf(0.0, 1.0) > x->start_breakpoint ){ + if( fftease_randf(0.0,1.0) > 0.5 ){ + channel[ i * 2 ] = 1; + } + else { + channel[ i * 2 ] = 2; + } + ++(x->set_count); + } else { + channel[ i * 2 ] = 0; + } + } + for( i = 0; i < fft->N+2; i++ ){ + x->last_frame[i] = channel[i]; + } +} + +void cavoc27_hold_time(t_cavoc27 *x, t_floatarg hold_time) +{ + if(hold_time <= 0){ + post("illegal hold time %f",hold_time); + return; + } + x->hold_time = hold_time; + if(! x->fft->initialized){ + return; + } + if(! x->frame_duration){ + error("%s: zero frame duration",OBJECT_NAME); + return; + } + x->hold_frames = (int) ( (x->hold_time/1000.0) / x->frame_duration); + if( x->hold_frames < 1 ) + x->hold_frames = 1; +} + +void cavoc27_dsp(t_cavoc27 *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + } + if(reset_required){ + cavoc27_init(x); + } + dsp_add(cavoc27_perform, 3, x, sp[0]->s_vec, sp[1]->s_vec); +} + diff --git a/externals/fftease/cavoc~.c b/externals/fftease/cavoc~.c new file mode 100644 index 000000000..8f211e331 --- /dev/null +++ b/externals/fftease/cavoc~.c @@ -0,0 +1,472 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *cavoc_class; + +#define OBJECT_NAME "cavoc~" + +typedef struct _cavoc +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float frame_duration; + int max_bin; + + t_float fundamental; + short left; + short right; + short center; + short *rule; + + t_float start_breakpoint; + int hold_frames; + int frames_left; + int set_count; + void *list_outlet; + t_atom *list_data; + short mute; + short external_trigger; + short trigger_value; // set to 1 when a bang is received + + t_float topfreq; // highest to synthesize - Nyquist by default + t_float bottomfreq; + t_float *freqs; + t_float *amps; + t_float *cavoc; + t_float density; // treat as attribute + t_float hold_time; // treat as attribute +} t_cavoc; + +void *cavoc_new(t_symbol *msg, short argc, t_atom *argv); +void cavoc_dsp(t_cavoc *x, t_signal **sp); +t_int *cavoc_perform(t_int *w); +void cavoc_free( t_cavoc *x ); +int cavoc_apply_rule( short left, short right, short center, short *rule); +float cavoc_randf(float min, float max); +void cavoc_rule (t_cavoc *x, t_symbol *msg, short argc, t_atom *argv); +void cavoc_retune (t_cavoc *x, t_floatarg min, t_floatarg max); +void cavoc_mute (t_cavoc *x, t_floatarg toggle); +void cavoc_external_trigger(t_cavoc *x, t_floatarg toggle); +void cavoc_init(t_cavoc *x); +void cavoc_fftinfo(t_cavoc *x); +void cavoc_bang(t_cavoc *x); +void cavoc_topfreq(t_cavoc *x, t_floatarg tf); +void cavoc_oscbank(t_cavoc *x, t_floatarg flag); +void cavoc_density(t_cavoc *x, t_floatarg f); +void cavoc_hold_time(t_cavoc *x, t_floatarg f); +void build_spectrum(t_cavoc *x, float min, float max); +void cavoc_bottomfreq(t_cavoc *x, t_floatarg bf); + + +void cavoc_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("cavoc~"), (t_newmethod)cavoc_new, + (t_method)cavoc_free,sizeof(t_cavoc), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_cavoc, x_f); + class_addmethod(c,(t_method)cavoc_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)cavoc_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_rule,gensym("rule"),A_GIMME,0); + class_addmethod(c,(t_method)cavoc_external_trigger,gensym("external_trigger"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_bang,gensym("bang"),0); + class_addmethod(c,(t_method)cavoc_retune,gensym("retune"),A_FLOAT,A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_topfreq,gensym("topfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_bottomfreq,gensym("bottomfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_density,gensym("density"),A_FLOAT,0); + class_addmethod(c,(t_method)cavoc_hold_time,gensym("hold_time"),A_FLOAT,0); + cavoc_class = c; + fftease_announce(OBJECT_NAME); +} + + +void cavoc_fftinfo( t_cavoc *x ) +{ +t_fftease *fft = x->fft; + fftease_fftinfo( fft, OBJECT_NAME ); +} + +void cavoc_density(t_cavoc *x, t_floatarg density) +{ + int i; + t_fftease *fft = x->fft; + + if( density < 0.0001 ){ + density = .0001; + } else if( density > .9999 ){ + density = 1.0; + } + x->density = density; + x->start_breakpoint = 1.0 - x->density; + for( i = 0; i < fft->N2 + 1; i++ ){ + if( cavoc_randf(0.0, 1.0) > x->start_breakpoint ){ + x->amps[ i ] = 1; + ++(x->set_count); + } else { + x->amps[ i ] = 0; + } + } +} + +void cavoc_hold_time(t_cavoc *x, t_floatarg f) +{ + if(f <= 0) + return; + x->hold_time = f; + x->hold_frames = (int) ((x->hold_time/1000.0) / x->frame_duration); + if( x->hold_frames < 1 ) + x->hold_frames = 1; + x->frames_left = x->hold_frames; +} + +void cavoc_external_trigger(t_cavoc *x, t_floatarg toggle) +{ + x->external_trigger = (short)toggle; +} + +void cavoc_mute (t_cavoc *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void cavoc_retune(t_cavoc *x, t_floatarg min, t_floatarg max) +{ + if( max <= 0 || min <= 0 || min > max ){ + error("bad values for min and max multipliers"); + return; + } + if( min < .1 ) + min = 0.1; + if( max > 2.0 ) + max = 2.0; + build_spectrum(x, (float)min, (float)max); +} + + + +void cavoc_bang(t_cavoc *x) +{ + if(x->external_trigger) + x->trigger_value = 1; +} + +void cavoc_oscbank(t_cavoc *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void cavoc_rule (t_cavoc *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + short *rule = x->rule; + if( argc != 8 ){ + error("the rule must be size 8"); + return; + } + + for( i = 0; i < 8; i++ ){ + rule[i] = (short) atom_getfloatarg(i, argc, argv); + } +} + +void cavoc_free( t_cavoc *x ){ + fftease_free(x->fft); + free(x->fft); + free(x->amps); + free(x->freqs); + free(x->rule); +} + +void *cavoc_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_cavoc *x = (t_cavoc *)pd_new(cavoc_class); + t_fftease *fft; + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + x->fft->initialized = 0; + x->density = 0.1; + x->hold_time = 500.0; // convert from ms + x->fft->obank_flag = 0; + x->fft->N = FFTEASE_DEFAULT_FFTSIZE; + x->fft->overlap = FFTEASE_DEFAULT_OVERLAP; + x->fft->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ x->density = atom_getfloatarg(2, argc, argv); } + if(argc > 3){ x->hold_time = atom_getfloatarg(3, argc, argv); } + + return x; +} + +void cavoc_init(t_cavoc *x) +{ + t_fftease *fft = x->fft; + short initialized = fft->initialized; + fftease_init(fft); + + fft->lo_bin = 0; + fft->hi_bin = fft->N2 - 1; + + if(! fft->R ){ + error("zero sampling rate!"); + return; + } + x->frame_duration = (float)fft->D/(float) fft->R; + if(x->hold_time <= 0.0) + x->hold_time = 150; + x->hold_frames = (int) ((x->hold_time * 0.001) / x->frame_duration) ; + x->frames_left = x->hold_frames; + x->trigger_value = 0; + x->topfreq = fft->R / 2.0; + x->bottomfreq = 0.0; + + if(!initialized){ + + srand(time(0)); + x->mute = 0; + + x->external_trigger = 0; + if( x->density < 0.0 ){ + x->density = 0; + } else if( x->density > 1.0 ){ + x->density = 1.0; + } + x->start_breakpoint = 1.0 - x->density; + x->freqs = (t_float *) calloc((fft->N2 + 1), sizeof(t_float)); + x->amps = (t_float *) calloc((fft->N2 + 1), sizeof(t_float)); + x->cavoc = (t_float *) calloc((fft->N + 2), sizeof(t_float)); + x->rule = (short *) calloc(8, sizeof(short)); + + x->rule[2] = x->rule[3] = x->rule[5] = x->rule[6] = 1; + x->rule[0] = x->rule[1] = x->rule[4] = x->rule[7] = 0; + + + } else { + x->freqs = (t_float *) realloc(x->freqs, (fft->N2 + 1) * sizeof(t_float)); + x->amps = (t_float *) realloc(x->amps, (fft->N2 + 1) * sizeof(t_float)); + } + build_spectrum(x, 0.9, 1.1); +} + + +void build_spectrum(t_cavoc *x, float min, float max) +{ +t_fftease *fft = x->fft; +float basefreq; +int i; + x->set_count = 0; + for(i = 0; i < fft->N2 + 1; i++){ + if(cavoc_randf(0.0, 1.0) > x->start_breakpoint){ + x->amps[i] = 1; + ++(x->set_count); + } else { + x->amps[i] = 0; + } + basefreq = x->bottomfreq + (( (x->topfreq - x->bottomfreq) / (float) fft->N2 ) * (float) i ); + x->freqs[i] = basefreq * cavoc_randf(min,max); + } + for( i = 0; i < fft->N2 + 1; i++ ){ + fft->channel[i * 2] = x->amps[i]; + fft->channel[i * 2 + 1] = x->freqs[i]; + } + +} + +void cavoc_topfreq(t_cavoc *x, t_floatarg tf) +{ + t_fftease *fft = x->fft; + if(tf < 100 || tf > fft->R / 2.0){ + error("%s: top frequency out of range: %f",OBJECT_NAME, tf); + return; + } + x->topfreq = (float) tf; + build_spectrum(x, 0.9, 1.1); +} + +void cavoc_bottomfreq(t_cavoc *x, t_floatarg bf) +{ + if(bf < 0 && bf > x->topfreq){ + error("%s: bottom frequency out of range: %f",OBJECT_NAME, bf); + return; + } + x->bottomfreq = (float) bf; + build_spectrum(x, 0.9, 1.1); +} + +void do_cavoc(t_cavoc *x) +{ + int i; + t_fftease *fft = x->fft; + int N = fft->N; + int N2 = fft->N2; + t_float *channel = fft->channel; + int hold_frames = x->hold_frames; + short *rule = x->rule; + short left = x->left; + short right = x->right; + short center = x->center; + short external_trigger = x->external_trigger; + short new_event = 0; + t_float *amps = x->amps; + t_float *freqs = x->freqs; + + if(external_trigger){// only accurate to within a vector because of FFT + if(x->trigger_value){ + x->trigger_value = 0; + new_event = 1; + } + } else if(--(x->frames_left) <= 0){ + x->frames_left = hold_frames; + new_event = 1; + } + if(new_event){ + for( i = 1; i < N2; i++ ){ + left = amps[i - 1]; + center = amps[i] ; + right = amps[i + 1]; + channel[i * 2] = cavoc_apply_rule(left, right, center, rule); + } + center = amps[0]; + right = amps[1]; + left = amps[N2]; + channel[0] = cavoc_apply_rule(left, right, center, rule); + + center = amps[N2]; + right = amps[0]; + left = amps[N2 - 1]; + channel[N] = cavoc_apply_rule(left, right, center, rule); + for(i = 0; i < N2 + 1; i++){ + channel[(i*2) + 1] = freqs[i]; + amps[i] = channel[i * 2]; + } + } + + if(fft->obank_flag){ + for(i = 0; i < N2 + 1; i++){ + channel[(i*2) + 1] = freqs[i]; + channel[i * 2] = amps[i]; + } + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft, -1); + fftease_overlapadd(fft); + } +} + + +t_int *cavoc_perform(t_int *w) +{ + int i,j; + t_cavoc *x = (t_cavoc *) (w[1]); + t_float *MSPOutputVector = (t_float *)(w[2]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + float mult = fft->mult ; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalOutputVector = fft->internalOutputVector; + int MSPVectorSize = fft->MSPVectorSize; + + if(fft->obank_flag){ + mult *= FFTEASE_OSCBANK_SCALAR; + } + + if( x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+3; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + + do_cavoc(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + do_cavoc(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(float)); + operationCount = (operationCount + 1) % operationRepeat; + if( operationCount == 0 ) { + do_cavoc(x); + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+3; +} + +int cavoc_apply_rule(short left, short right, short center, short *rule){ + + if( ! center ){ + if( ! left && ! right){ + return rule[0]; + } else if ( ! left && right ){ + return rule[1]; + } else if ( left && ! right ) { + return rule[2]; + } else if (left && right) { + return rule[3]; + } + } else { + if( ! left && ! right){ + return rule[4]; + } else if ( ! left && right ){ + return rule[5]; + } else if ( left && ! right ) { + return rule[6]; + } else if (left && right) { + return rule[7]; + } + } + return 0; +} + +float cavoc_randf(float min, float max) +{ + float randv; + randv = (float) (rand() % 32768) / 32768.0 ; + return (min + ((max-min) * randv)) ; +} + +void cavoc_dsp(t_cavoc *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + } + if(reset_required){ + cavoc_init(x); + } + dsp_add(cavoc_perform, 2, x, sp[1]->s_vec); +} diff --git a/externals/fftease/centerring~.c b/externals/fftease/centerring~.c new file mode 100644 index 000000000..ba9dda45a --- /dev/null +++ b/externals/fftease/centerring~.c @@ -0,0 +1,380 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +#define OBJECT_NAME "centerring~" +#define MAX_WARP 16.0 + +static t_class *centerring_class; + +#define OBJECT_NAME "centerring~" + +typedef struct _centerring +{ + + t_object x_obj; + float x_f; + t_fftease *fft; + int bufferLength; + int recalc; + int seed; + t_float baseFreq; + t_float constFreq; + t_float bandFreq; + t_float frameR; + t_float *ringPhases; + t_float *ringIncrements; + t_float *sineBuffer; + t_float *bufferOne; + t_float *channelOne; + short connected[8]; + short mute; + short bypass; +} t_centerring; + +void *centerring_new(t_symbol *s, int argc, t_atom *argv); +t_int *centerring_perform(t_int *w); +void centerring_dsp(t_centerring *x, t_signal **sp); +void centerring_dest(t_centerring *x, t_float f); +void centerring_messages(t_centerring *x, t_symbol *s, short argc, t_atom *argv); +void centerring_adjust( t_centerring *x ); +void centerring_zerophases( t_centerring *x ); +void centerring_randphases( t_centerring *x ); +void centerring_free(t_centerring *x); +void centerring_init(t_centerring *x); +void centerring_mute(t_centerring *x, t_floatarg toggle); +void centerring_fftinfo( t_centerring *x ); + +void centerring_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("centerring~"), (t_newmethod)centerring_new, + (t_method)centerring_free,sizeof(t_centerring), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_centerring, x_f); + class_addmethod(c,(t_method)centerring_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)centerring_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)centerring_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)centerring_messages,gensym("seed"), A_GIMME, 0); + class_addmethod(c,(t_method)centerring_messages,gensym("zerophases"), 0); + class_addmethod(c,(t_method)centerring_messages,gensym("randphases"), 0); + centerring_class = c; + fftease_announce(OBJECT_NAME); +} + +void centerring_messages(t_centerring *x, t_symbol *s, short argc, t_atom *argv) +{ + + if (s == gensym("seed")) + x->seed = (int) atom_getfloatarg(0,argc,argv); + + if (s == gensym("zerophases")) + centerring_zerophases( x ); + + if (s == gensym("randphases")) + centerring_randphases( x ); +} + +void *centerring_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + + t_centerring *x = (t_centerring *)pd_new(centerring_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + /* optional arguments: baseFreq, bandFreq, constFreq, seed, overlap, winfac */ + x->baseFreq = 1.0; + x->bandFreq = 0.2; + x->constFreq = 1.0; + x->seed = 1977; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void centerring_init(t_centerring *x) +{ + t_fftease *fft = x->fft; + int Nw; + int N; + int N2; + short initialized= fft->initialized; + fftease_init(fft); + Nw = fft->Nw; + N = fft->N; + N2 = fft->N2; + if(! fftease_msp_sanity_check(fft,OBJECT_NAME)){ + post("failed sanity check!"); + return; + } + + x->frameR = (float) fft->R / (float) fft->D; + + if(!initialized){ + x->mute = 0; + x->bufferLength = 131072; + x->recalc = 0; + x->ringPhases = (t_float *) calloc((N2 + 1), sizeof(t_float)); + x->ringIncrements = (t_float *) calloc((N2 + 1), sizeof(t_float)); + x->sineBuffer = (t_float *) calloc((x->bufferLength + 1), sizeof(t_float)); + fftease_makeSineBuffer(x->sineBuffer, x->bufferLength); + } else { + x->ringIncrements = (t_float *)realloc((void *)x->ringIncrements, (N2 + 1) * sizeof(t_float)); + x->ringPhases = (t_float *)realloc((void *)x->ringPhases, (N2 + 1) * sizeof(t_float)); + } + centerring_adjust(x); + centerring_zerophases(x); +} + +void centerring_free(t_centerring *x) +{ + + fftease_free(x->fft); + free(x->fft); + free(x->ringPhases); + free(x->ringIncrements); + free(x->sineBuffer); +} + +void centerring_adjust( t_centerring *x ) { + + int i; + t_float *ringIncrements = x->ringIncrements; + int N2 = x->fft->N2; + + if(x->frameR == 0){ + post("centerring_adjust got at 0 SR!"); + return; + } + for (i=0; i < N2; i++) { + + *(ringIncrements+i) = + fftease_frequencyToIncrement( + x->frameR, + x->baseFreq * ((fftease_rrand(&(x->seed)) * x->bandFreq) + x->constFreq ), + x->bufferLength + ); + } +} + + +void centerring_zerophases( t_centerring *x ) { + + int i; + + for (i=0; i < x->fft->N2; i++) + *((x->ringPhases)+i) = 0.; +} + + +void centerring_randphases( t_centerring *x ) { + + int i; + + for (i=0; i < x->fft->N2; i++) + *((x->ringPhases)+i) = fftease_prand(&(x->seed)) * (float) (x->bufferLength); + +} + +void do_centerring(t_centerring *x) +{ + t_fftease *fft = x->fft; + t_float *buffer = fft->buffer; + t_float *channel = fft->channel; + int i, odd, even; + t_float a1,b1; + int N2 = fft->N2; + int bufferLength = x->bufferLength; + t_float *ringPhases = x->ringPhases; + t_float *ringIncrements = x->ringIncrements; + t_float *sineBuffer = x->sineBuffer; + + /* recalculate our oscillator values if object inputs have been updated */ + + if (x->recalc) + centerring_adjust( x ); + + x->recalc = 0; + + fftease_fold(fft); + fftease_rdft(fft,1); + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(buffer+1) : *(buffer + even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(buffer + odd) ); + *(channel + even) = hypot( a1, b1 ); + *(channel + odd) = -atan2( b1, a1 ); + } + + + /* perform ring modulation on successive fft frames */ + + for (i=0; i < N2; i++) { + even = i<<1; + + *(channel + even) *= fftease_bufferOscil( ringPhases+i, + *(ringIncrements+i), sineBuffer, bufferLength ); + } + + /* convert from polar to cartesian */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(buffer + even) = *(channel + even) * cos( *(channel + odd) ); + + if ( i != N2 ) + *(buffer + odd) = (*(channel + even)) * -sin( *(channel + odd) ); + } + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + +t_int *centerring_perform(t_int *w) +{ + + int i, j; + + t_centerring *x = (t_centerring *) (w[1]); + t_fftease *fft = x->fft; + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *vec_baseFreq = (t_float *)(w[3]); + t_float *vec_bandFreq = (t_float *)(w[4]); + t_float *vec_constFreq = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + t_float *input = fft->input; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + float mult = fft->mult ; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+7; + } + x->recalc = 1; + x->baseFreq = *vec_baseFreq; + x->bandFreq = *vec_bandFreq; + x->constFreq = *vec_constFreq; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_centerring(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_centerring(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_centerring(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void centerring_mute(t_centerring *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void centerring_bypass(t_centerring *x, t_floatarg toggle) +{ + x->bypass = (short)toggle; +} + +void centerring_overlap(t_centerring *x, t_floatarg f) +{ + x->fft->overlap = (int) f; + centerring_init(x); +} + +void centerring_winfac(t_centerring *x, t_floatarg f) +{ + x->fft->winfac = (int) f; + centerring_init(x); +} + +void centerring_fftsize(t_centerring *x, t_floatarg f) +{ + x->fft->N = (int) f; + centerring_init(x); +} + +void centerring_fftinfo( t_centerring *x ) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} +void centerring_dsp(t_centerring *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + centerring_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(centerring_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec); + } +} + + diff --git a/externals/fftease/codepend~.c b/externals/fftease/codepend~.c new file mode 100644 index 000000000..a9bf7708f --- /dev/null +++ b/externals/fftease/codepend~.c @@ -0,0 +1,377 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *codepend_class; + +#define OBJECT_NAME "codepend~" + +typedef struct _codepend +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; // for cross synthesis use + t_float threshold; + t_float exponent; + short connected[8]; + short mute; + short bypass; + int invert_countdown; // delay onset of invert effect to avoid loud glitches + int invert_nextstate;// next state for invert + int invert; + t_float invert_pad; +} t_codepend; + +void *codepend_new(t_symbol *s, int argc, t_atom *argv); +void codepend_dsp(t_codepend *x, t_signal **sp); +t_int *codepend_perform(t_int *w); +void codepend_invert(t_codepend *x, t_floatarg toggle); +void codepend_free(t_codepend *x); +void codepend_mute(t_codepend *x, t_floatarg toggle); +void codepend_fftinfo(t_codepend *x); +void codepend_init(t_codepend *x); +void codepend_pad(t_codepend *x, t_floatarg pad); + +void codepend_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("codepend~"), (t_newmethod)codepend_new, + (t_method)codepend_free,sizeof(t_codepend), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_codepend, x_f); + class_addmethod(c,(t_method)codepend_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)codepend_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)codepend_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)codepend_invert,gensym("invert"), A_FLOAT, 0); + class_addmethod(c,(t_method)codepend_pad,gensym("pad"), A_FLOAT, 0); + codepend_class = c; + fftease_announce(OBJECT_NAME); +} + +void codepend_mute(t_codepend *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void codepend_fftinfo( t_codepend *x ) +{ + fftease_fftinfo(x->fft, OBJECT_NAME); +} + +void codepend_free(t_codepend *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void codepend_pad(t_codepend *x, t_floatarg pad) +{ + x->invert_pad = pad; + codepend_invert(x,x->invert);//resubmit to invert +} + +void codepend_invert(t_codepend *x, t_floatarg toggle) +{ + + x->invert_nextstate = (short)toggle; + x->invert_countdown = x->fft->overlap; // delay effect for "overlap" vectors + + if(x->invert_nextstate){ // lower gain immediately; delay going to invert + x->fft->mult = (1. / (float) x->fft->N) * x->invert_pad; + } else { + x->invert = 0; //immediately turn off invert; delay raising gain + } + +} + +void *codepend_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_codepend *x = (t_codepend *)pd_new(codepend_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + + /* optional arguments: scaling exponent, threshold (now linear), overlap, winfac */ + x->exponent = 0.25; + x->threshold = 0.01; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + fft2->MSPVectorSize = fft->MSPVectorSize = sys_getblksize(); + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +void codepend_init(t_codepend *x ) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + if(!initialized){ + x->invert_pad = 0.025; // -32 dB + x->invert_countdown = 0; + x->mute = 0; + x->invert = 0; + } + if(x->invert){ + x->fft->mult *= x->invert_pad; + } +} + +void do_codepend(t_codepend *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int N2 = fft->N2; + float a1, b1, a2, b2, threshold = 0.1; + int even, odd; + int invert = x->invert; + t_float exponent = x->exponent; + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + t_float *channelOne = fft->channel; + // float *channelTwo = fft2->channel; + + if(x->invert_countdown > 0){ + + if(x->invert) { // we + } else { + } + --(x->invert_countdown); + if(! x->invert_countdown){ // countdown just ended + if(x->invert_nextstate){ // moving to invert (gain is already down) + x->invert = x->invert_nextstate; + } else { // invert is already off - now reset gain + x->fft->mult = 1. / (float) x->fft->N; + } + } + } + if ( x->threshold != 0. ) + threshold = x->threshold; + + fftease_fold(fft); + fftease_fold(fft2); + + fftease_rdft(fft, 1); + fftease_rdft(fft2, 1); + + if (invert) { + + for ( i = 0; i <= N2; i++ ) { + + float mag_1, mag_2; + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + /* complex division */ + + mag_1 = hypot( a1, b1 ); + mag_2 = hypot( a2, b2 ); + + if ( mag_2 > threshold ) + *(channelOne+even) = mag_1 / mag_2; + + else + *(channelOne+even) = mag_1 / threshold; + + if ( mag_1 != 0. && mag_2 != 0. ) + *(channelOne+odd) = atan2( b2, a2 ) - atan2( b1, a1 ); + + else + *(channelOne+odd) = 0.; + + /* raise resulting magnitude to a desired power */ + + *(channelOne+even) = pow( *(channelOne+even), exponent ); + } + } + + + else { + + for ( i = 0; i <= N2; i++ ) { + + float f_real, f_imag; + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + /* complex multiply */ + + f_real = (a1 * a2) - (b1 * b2); + f_imag = (a1 * b2) + (b1 * a2); + + *(channelOne+even) = hypot( f_real, f_imag ); + *(channelOne+odd) = -atan2( f_imag, f_real ); + + /* raise resulting magnitude to a desired power */ + + *(channelOne+even) = pow( *(channelOne+even), exponent ); + } + } + + /* convert back to complex form, read for the inverse fft */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + + fftease_rdft(fft, -1); + fftease_overlapadd(fft); +} + +t_int *codepend_perform(t_int *w) +{ + int i, j; + /* get our inlets and outlets */ + t_codepend *x = (t_codepend *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *vec_exponent = (t_float *)(w[4]); + t_float *vec_threshold = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + + x->exponent = *vec_exponent; + x->threshold = *vec_threshold; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + float mult = fft->mult; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+7; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_codepend(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_codepend(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_codepend(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void codepend_dsp(t_codepend *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + codepend_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(codepend_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec); + } +} diff --git a/externals/fftease/collect.pl b/externals/fftease/collect.pl new file mode 100644 index 000000000..34f1f89b1 --- /dev/null +++ b/externals/fftease/collect.pl @@ -0,0 +1,6 @@ +while(<*>){ + chomp; + if(/darwin$/ || /libfftease.dylib/){ + `mv $_ fftease32-externals`; + } +} diff --git a/externals/fftease/convert.c b/externals/fftease/convert.c new file mode 100644 index 000000000..f08ee78c4 --- /dev/null +++ b/externals/fftease/convert.c @@ -0,0 +1,49 @@ +#include "fftease.h" + + +/* S is a spectrum in rfft format, i.e., it contains N real values + arranged as real followed by imaginary values, except for first + two values, which are real parts of 0 and Nyquist frequencies; + convert first changes these into N/2+1 PAIRS of magnitude and + phase values to be stored in output array C; the phases are then + unwrapped and successive phase differences are used to compute + estimates of the instantaneous frequencies for each phase vocoder + analysis channel; decimation rate D and sampling rate R are used + to render these frequency values directly in Hz. */ + + +void fftease_convert(t_fftease *fft) +{ + t_float *buffer = fft->buffer; + t_float *channel = fft->channel; + int N2 = fft->N2; + t_float *lastphase = fft->c_lastphase_in; + t_float fundamental = fft->c_fundamental; + t_float factor = fft->c_factor_in; + + t_float phase, phasediff; + int real,imag,amp,freq; + t_float a,b; + int i; + + + for ( i = 0; i <= N2; i++ ) { + imag = freq = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? buffer[1] : buffer[real] ); + b = ( i == 0 || i == N2 ? 0. : buffer[imag] ); + + channel[amp] = hypot( a, b ); + if ( channel[amp] == 0. ) + phasediff = 0.; + else { + phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; + lastphase[i] = phase; + + while ( phasediff > PI ) + phasediff -= TWOPI; + while ( phasediff < -PI ) + phasediff += TWOPI; + } + channel[freq] = phasediff*factor + i*fundamental; + } +} diff --git a/externals/fftease/cross~.c b/externals/fftease/cross~.c new file mode 100644 index 000000000..56d141441 --- /dev/null +++ b/externals/fftease/cross~.c @@ -0,0 +1,297 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *cross_class; + +#define OBJECT_NAME "cross~" + +typedef struct _cross +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; + t_float threshie; + short mute;//flag + short autonorm;// for self gain regulation + t_float normult; // adjusted multiplier on a per-frame basis +} t_cross; + +void *cross_new(t_symbol *s, int argc, t_atom *argv); +t_int *cross_perform(t_int *w); +void cross_dsp(t_cross *x, t_signal **sp); +void *cross_new(t_symbol *s, int argc, t_atom *argv); +void cross_init(t_cross *x); +void cross_fftinfo(t_cross *x); +void cross_mute(t_cross *x, t_floatarg toggle); +void cross_autonorm(t_cross *x, t_floatarg toggle); +void cross_free(t_cross *x); + +void cross_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("cross~"), (t_newmethod)cross_new, + (t_method)cross_free,sizeof(t_cross), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_cross, x_f); + class_addmethod(c,(t_method)cross_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)cross_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)cross_autonorm, gensym("autonorm"), A_FLOAT, 0); + cross_class = c; + fftease_announce(OBJECT_NAME); +} + +void cross_autonorm(t_cross *x, t_floatarg toggle) +{ + x->autonorm = (short) toggle; +} + +void cross_fftsize(t_cross *x, t_floatarg f) +{ + x->fft->N = (int) f; + x->fft2->N = (int) f; + cross_init(x); +} + +void cross_mute(t_cross *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void cross_free(t_cross *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void *cross_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_cross *x = (t_cross *)pd_new(cross_class); + + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void cross_init(t_cross *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized; + + initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->threshie = .001 ; + x->autonorm = 0; + x->mute = 0; + } +} + +void do_cross(t_cross *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int N2 = fft->N2; + t_float a1, b1, a2, b2; + t_float *buffer1 = fft->buffer; + t_float *buffer2 = fft2->buffer; + t_float *channel1 = fft->channel; + short autonorm = x->autonorm; + int N = fft->N; + t_float mult = fft->mult; + int even, odd; + t_float gainer; + t_float threshie = x->threshie; + t_float ingain = 0; + t_float outgain, rescale; + t_float mymult; + + fftease_fold(fft); + fftease_fold(fft2); + fftease_rdft(fft,1); + fftease_rdft(fft2,1); + + /* changing algorithm for window flexibility */ + if(autonorm){ + ingain = 0; + for(i = 0; i < N; i+=2){ + ingain += hypot(buffer1[i], buffer1[i+1]); + } + } + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(buffer1+1) : *(buffer1+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(buffer1+odd) ); + a2 = ( i == N2 ? *(buffer2+1) : *(buffer2+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(buffer2+odd) ); + gainer = hypot(a2, b2); + if( gainer > threshie ) + *(channel1+even) = hypot( a1, b1 ) * gainer; + *(channel1+odd) = -atan2( b1, a1 ); + *(buffer1+even) = *(channel1+even) * cos( *(channel1+odd) ); + if ( i != N2 ) + *(buffer1+odd) = -(*(channel1+even)) * sin( *(channel1+odd) ); + + } + if(autonorm){ + outgain = 0; + for(i = 0; i < N; i+=2){ + outgain += hypot(buffer1[i], buffer1[i+1]); + } + if(ingain <= .0000001){ + // post("gain emergency!"); + rescale = 1.0; + } else { + rescale = ingain / outgain; + } + //post("ingain %f outgain %f rescale %f",ingain, outgain, rescale); + x->normult = mult * rescale; + } else { + x->normult = mult; + //post("mymult: %f", mymult); + } + fftease_rdft(fft, -1); + fftease_overlapadd(fft); +} + +t_int *cross_perform(t_int *w) +{ + int i, j; + t_cross *x = (t_cross *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *threshold = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + x->threshie = *threshold; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_cross(x); + mult = x->normult; + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_cross(x); + mult = x->normult; + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_cross(x); + mult = x->normult; + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void cross_dsp(t_cross *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + cross_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(cross_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} + diff --git a/externals/fftease/dentist~.c b/externals/fftease/dentist~.c new file mode 100644 index 000000000..62c8e4bdc --- /dev/null +++ b/externals/fftease/dentist~.c @@ -0,0 +1,585 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *dentist_class; + +#define OBJECT_NAME "dentist~" + +typedef struct _dentist +{ + t_object x_obj; + float x_f; + t_fftease *fft; + short *bin_selection; + short *last_bin_selection; + int *active_bins; + int tooth_count; + int ramp_frames; + int frames_left; + t_float frame_duration; + int max_bin; + t_float topfreq; + t_float funda; + void *list_outlet; + short direct_update; + short mute; + t_atom *list_data; + short interpolate_singles; + t_float sync; + t_float ramp_ms; + +} t_dentist; + +void *dentist_new(t_symbol *msg, short argc, t_atom *argv); +void dentist_dsp(t_dentist *x, t_signal **sp); +t_int *dentist_perform(t_int *w); +void set_switch_bins (t_dentist *x, int i); +void reset_shuffle(t_dentist *x); +void dentist_showstate(t_dentist *x); +void dentist_direct_update(t_dentist *x, t_floatarg toggle); +void dentist_mute(t_dentist *x, t_floatarg toggle); +void dentist_setstate(t_dentist *x, t_symbol *msg, short argc, t_atom *argv); +void dentist_ramptime(t_dentist *x, t_floatarg ramp_ms); +int rand_index(int max); +void dentist_init(t_dentist *x); +void dentist_bins_pd (t_dentist *x, t_floatarg i); +void dentist_topfreq(t_dentist *x, t_floatarg f); +void dentist_free(t_dentist *x); +void dentist_toothcount(t_dentist *x, t_floatarg newcount); +void dentist_scramble(t_dentist *x); +void dentist_activate_bins(t_dentist *x, t_floatarg f); +void dentist_interpolate_singles(t_dentist *x, t_floatarg f); +void dentist_fftinfo(t_dentist *x); +void dentist_mute(t_dentist *x, t_floatarg toggle); + +void dentist_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("dentist~"), (t_newmethod)dentist_new, + (t_method)dentist_free,sizeof(t_dentist), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_dentist, x_f); + class_addmethod(c,(t_method)dentist_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)dentist_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)dentist_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)dentist_showstate,gensym("showstate"),0); + class_addmethod(c,(t_method)dentist_setstate, gensym("setstate"), A_GIMME, 0); + class_addmethod(c,(t_method)dentist_ramptime, gensym("ramptime"), A_FLOAT, 0); + class_addmethod(c,(t_method)dentist_topfreq, gensym("topfreq"), A_FLOAT, 0); + class_addmethod(c,(t_method)dentist_toothcount, gensym("toothcount"), A_FLOAT, 0); + class_addmethod(c,(t_method)dentist_interpolate_singles, gensym("interpolate_singles"), A_FLOAT, 0); + class_addmethod(c,(t_method)dentist_scramble, gensym("scramble"), 0); + + dentist_class = c; + fftease_announce(OBJECT_NAME); +} + + +void dentist_interpolate_singles(t_dentist *x, t_floatarg f) +{ + x->interpolate_singles = (short)f; + // post("singles interp: %d",x->interpolate_singles); +} + +void dentist_free(t_dentist *x) +{ + fftease_free(x->fft); + free(x->fft); + free(x->bin_selection); + free(x->active_bins); + free(x->last_bin_selection); + free(x->list_data); +} + +void dentist_fftsize(t_dentist *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->N = (int) f; + dentist_init(x); +} + +void dentist_overlap(t_dentist *x, t_floatarg f) +{ + x->fft->overlap = (int) f; + dentist_init(x); +} + +void dentist_winfac(t_dentist *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->winfac = (int) f; + dentist_init(x); +} + +void dentist_fftinfo( t_dentist *x ) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} + + +void dentist_direct_update( t_dentist *x, t_floatarg toggle) +{ + x->direct_update = (short)toggle; +} + +void dentist_mute( t_dentist *x, t_floatarg toggle ) +{ + x->mute = (short)toggle; +} + +void *dentist_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft; + t_dentist *x = (t_dentist *)pd_new(dentist_class); + + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->list_outlet = outlet_new(&x->x_obj, gensym("list")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + + x->topfreq = 3000; // an attribute candidate + x->ramp_ms = 1000.0; + x->tooth_count = 3; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +void dentist_topfreq(t_dentist *x, t_floatarg f) +{ + float funda = x->funda; + float curfreq; + t_fftease *fft = x->fft; + if(f < 50 || f > fft->R/2.0) + return; + + x->topfreq = f; + if(! x->fft->initialized){ + return; + } + x->max_bin = 1; + curfreq = 0; + while(curfreq < x->topfreq) { + ++(x->max_bin); + curfreq += funda ; + } +} + +void dentist_init(t_dentist *x) +{ + int i; + t_fftease *fft = x->fft; + short initialized = fft->initialized; + fftease_init(fft); + + if(!initialized){ + x->sync = 0; + x->mute = 0; + x->direct_update = 0; + if(x->topfreq < 100) + x->topfreq = 100.0; + x->bin_selection = (short *) calloc(fft->N, sizeof(short)); + x->active_bins = (int *) calloc(fft->N2, sizeof(int)); + x->last_bin_selection = (short *) calloc(fft->N2, sizeof(short)) ; + x->list_data = (t_atom *) calloc((fft->N + 2), sizeof(t_atom)); + + x->interpolate_singles = 1; + x->ramp_frames = 0; + + } else { + x->bin_selection = (short *) realloc((void *)x->bin_selection, fft->N * sizeof(short)); + x->active_bins = (int *) realloc((void *)x->active_bins, fft->N2 * sizeof(int)); + x->last_bin_selection = (short *) realloc((void *)x->last_bin_selection, fft->N2 * sizeof(short)) ; + x->list_data = (t_atom *) realloc((void *)x->list_data, (fft->N + 2) * sizeof(t_atom)); + } + + dentist_scramble(x); + + fft->mult = 1. / (t_float) fft->N; + x->frame_duration = (t_float) fft->D / (t_float) fft->R; + x->frames_left = x->ramp_frames = (int)(x->ramp_ms * .001 / x->frame_duration); + x->funda = (t_float) fft->R / (t_float) fft->N; + x->max_bin = 1; + + if(!x->funda){ + error("%s: zero sampling rate!",OBJECT_NAME); + return; + } + x->max_bin = (int) (x->topfreq / x->funda); + if(x->max_bin < 1) + x->max_bin = 1; + + for( i = 0; i < fft->N2; i++) { + x->last_bin_selection[i] = x->bin_selection[i]; + } + dentist_toothcount(x, x->tooth_count); +} + +void do_dentist(t_dentist *x) +{ + int i; + t_float oldfrac,newfrac; + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + int frames_left = x->frames_left; + int ramp_frames = x->ramp_frames; + short *bin_selection = x->bin_selection; + short *last_bin_selection = x->last_bin_selection; + int N2 = fft->N2; + float sync = x->sync; + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_leanconvert(fft); + + if(frames_left > 0 && ramp_frames > 0) { + // INTERPOLATE ACCORDING TO POSITION IN RAMP + oldfrac = (float) frames_left / (float) ramp_frames ; + sync = newfrac = 1.0 - oldfrac; + for( i = 0; i < N2 ; i++){ + if( (! bin_selection[i]) && (! last_bin_selection[i]) ){ + channel[i * 2] = 0; + } + else if (bin_selection[i]) { + channel[i * 2] *= newfrac; + } + else if (last_bin_selection[i]) { + channel[i * 2] *= oldfrac; + } + } + --frames_left; + if( ! frames_left ){ + // Copy current to last + for( i = 0; i < N2; i++) { + last_bin_selection[i] = bin_selection[i]; + } + } + } else { + for( i = 0; i < N2 ; i++){ + if( ! bin_selection[ i ] ){ + channel[ i * 2 ] = 0; + } + } + oldfrac = 0.0; + sync = 1.0; + } + + fftease_leanunconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); + x->frames_left = frames_left; + x->sync = sync; +} + +t_int *dentist_perform(t_int *w) +{ + int i,j; + t_dentist *x = (t_dentist *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_float *sync_vec = (t_float *)(w[4]); + t_fftease *fft = x->fft; + t_float *input = fft->input; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + t_float mult = fft->mult ; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + for(i=0; i < MSPVectorSize; i++){ sync_vec[i] = 0.0; } + return w+5; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_dentist(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_dentist(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_dentist(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + for(i = 0; i < MSPVectorSize; i++){ + sync_vec[i] = x->sync; + } + return w+5; +} + + +void set_switch_bins (t_dentist *x, int i) +{ + if( i < 0 ){ + i = 0; + } + if( i > x->fft->N2 ) { + i = x->fft->N2; + } + x->tooth_count = i; + if( x->direct_update ){ + reset_shuffle(x); + } + return; +} +//identical function for Pd +void dentist_bins_pd (t_dentist *x, t_floatarg i) +{ + if( i < 0 ){ + i = 0; + } + if( i > x->fft->N2 ) { + i = x->fft->N2; + } + x->tooth_count = (int)i; + if(x->direct_update){ + reset_shuffle(x); + } + return; +} + +// experimental, not to be used +void dentist_activate_bins(t_dentist *x, t_floatarg f) +{ + if(f < 0 || f > x->max_bin){ + post("* %d bin out of range",(int)f); + return; + } + x->tooth_count = (int)f; +} + +void dentist_scramble(t_dentist *x) +{ + short *last_bin_selection = x->last_bin_selection; + short *bin_selection = x->bin_selection; + int *active_bins = x->active_bins; + int N2 = x->fft->N2; + int i,tmp,b1,b2; + int maxswap = x->max_bin; + + if(!x->fft->initialized){ + return; + } + for(i=0; i<N2; i++){ + bin_selection[i] = 0; + active_bins[i] = i; + } + while(maxswap > 0){ + b1 = maxswap; + b2 = rand_index(maxswap); + tmp = active_bins[b1]; + active_bins[b1] = active_bins[b2]; + active_bins[b2] = tmp; + --maxswap; + } + for( i = 0; i < x->tooth_count; i++ ) { + x->bin_selection[active_bins[i]] = 1; + } + x->frames_left = x->ramp_frames; + if(! x->ramp_frames) { + for(i = 0; i < N2; i++){ + last_bin_selection[i] = bin_selection[i]; + } + } +} + + + +void dentist_toothcount(t_dentist *x, t_floatarg newcount) +{ + int i; + int nc = (int) newcount; + int tooth_count = x->tooth_count; + if(! x->fft->initialized){ + x->tooth_count = newcount; + return; + } + if(nc < 0 || nc > x->fft->N2){ + error("dentist~: %d out of range",nc); + return; + } + + if(nc < x->tooth_count){ + for(i = nc; i < tooth_count; i++){ + x->bin_selection[x->active_bins[i]] = 0; + } + } + else { + for(i = tooth_count; i < nc; i++){ + x->bin_selection[x->active_bins[i]] = 1; + } + } + // if immediate reset + if(x->interpolate_singles){ + // post("setting frames left"); + x->frames_left = x->ramp_frames; + } + if(! x->ramp_frames) { + for(i = 0; i < x->fft->N2; i++){ + x->last_bin_selection[i] = x->bin_selection[i]; + } + } + x->tooth_count = nc; +} + + +void reset_shuffle (t_dentist *x) +{ + int i; + int max; + + max = x->max_bin; + for(i = 0; i < x->fft->N2; i++){ + x->last_bin_selection[i] = x->bin_selection[i]; + x->bin_selection[i] = 0; + } + for(i = 0; i < x->max_bin; i++) { + x->active_bins[i] = rand_index(max); + x->bin_selection[x->active_bins[i]] = 1; + } + x->frames_left = x->ramp_frames; + if(! x->ramp_frames) { // Ramp Off - Immediately set last to current + for( i = 0; i < x->fft->N2; i++ ){ + x->last_bin_selection[ i ] = x->bin_selection[ i ]; + } + } +} + +int rand_index(int max) { + return (rand() % max); +} + +void dentist_setstate (t_dentist *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int selex; + + short *last_bin_selection = x->last_bin_selection; + short *bin_selection = x->bin_selection; + int *active_bins = x->active_bins; + x->tooth_count = argc; + int N2 = x->fft->N2; + + for(i = 0; i < N2; i++){ + last_bin_selection[i] = bin_selection[i]; // needed here + bin_selection[i] = 0; + } + + for (i=0; i < argc; i++) { + selex = atom_getfloatarg(i,argc,argv); + if (selex < N2 && selex >= 0 ) { + active_bins[i] = selex; + bin_selection[selex] = 1; + } else { + post ("%d out of range bin",selex); + } + } + + + x->frames_left = x->ramp_frames; + if(! x->ramp_frames) { // Ramp Off - Immediately set last to current + for(i = 0; i < N2; i++){ + last_bin_selection[i] = bin_selection[i]; + } + } + + return; +} +void dentist_ramptime (t_dentist *x, t_floatarg ramp_ms) { + + if(ramp_ms <= 0){ + return; + } + x->ramp_ms = ramp_ms; + if(!x->fft->initialized){ + return; + } + x->frames_left = x->ramp_frames = (int)(x->ramp_ms * .001 / x->frame_duration); + return; +} +// REPORT CURRENT SHUFFLE STATUS +void dentist_showstate (t_dentist *x) { + + t_atom *list_data = x->list_data; + + short i, count; + float data; + + count = 0; + for(i = 0; i < x->tooth_count; i++ ) { + data = x->active_bins[i]; + SETFLOAT(list_data+count,(t_float)x->active_bins[i]); + ++count; + } + outlet_list(x->list_outlet,0,x->tooth_count,list_data); + return; +} + +void dentist_dsp(t_dentist *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + dentist_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(dentist_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} + + diff --git a/externals/fftease/disarrain~.c b/externals/fftease/disarrain~.c new file mode 100644 index 000000000..41b525fef --- /dev/null +++ b/externals/fftease/disarrain~.c @@ -0,0 +1,687 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *disarrain_class; + +#define OBJECT_NAME "disarrain~" + +typedef struct _disarrain +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float *last_channel; + t_float *composite_channel; + int *shuffle_mapping; + int *last_shuffle_mapping; + int *shuffle_tmp; // work space for making a new distribution + int shuffle_count;// number of bins to swap + int last_shuffle_count;// ditto from last shuffle mapping + int max_bin; + void *list_outlet; + t_atom *list_data; + short mute; + short bypass; + t_float frame_duration; // duration in seconds of a single frame + t_float interpolation_duration; // duration in seconds of interpolation + int interpolation_frames; // number of frames to interpolate + int frame_countdown; // keep track of position in interpolation + int perform_method;// 0 for lean, 1 for full conversion + float ival; + short lock;// lock for switching mapping arrays, but not used now + short force_fade; // new fadetime set regardless of situation + short force_switch;// binds new distribution to change of bin count + long fftsize_attr; + long overlap_attr; + t_float top_frequency;// for remapping spectrum (NOW AN ATTRIBUTE) + short reset_flag; // call for reset + short switchcount_flag; // call for switch count + int switchcount; + int new_shuffle_count; // call to change switch count +} t_disarrain; + + +void *disarrain_new(t_symbol *msg, short argc, t_atom *argv); +void disarrain_dsp(t_disarrain *x, t_signal **sp); +t_int *disarrain_perform(t_int *w); +void disarrain_switch_count(t_disarrain *x, t_floatarg i); +void disarrain_fadetime(t_disarrain *x, t_floatarg f); +void disarrain_topfreq(t_disarrain *x, t_floatarg f); +void reset_shuffle( t_disarrain *x ); +void disarrain_showstate( t_disarrain *x ); +void disarrain_list (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv); +void disarrain_setstate (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv); +void disarrain_isetstate (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv); +int rand_index(int max); +void disarrain_mute(t_disarrain *x, t_floatarg toggle); +void copy_shuffle_array(t_disarrain *x); +void interpolate_frames_to_channel(t_disarrain *x); +void disarrain_killfade(t_disarrain *x); +void disarrain_forcefade(t_disarrain *x, t_floatarg toggle); +void disarrain_init(t_disarrain *x); +void disarrain_free(t_disarrain *x); +void disarrain_fftinfo(t_disarrain *x); +void disarrain_force_switch(t_disarrain *x, t_floatarg toggle); + +void disarrain_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("disarrain~"), (t_newmethod)disarrain_new, + (t_method)disarrain_free,sizeof(t_disarrain), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_disarrain, x_f); + class_addmethod(c,(t_method)disarrain_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)disarrain_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)reset_shuffle, gensym("bang"), 0); + class_addmethod(c,(t_method)disarrain_showstate,gensym("showstate"),0); + class_addmethod(c,(t_method)disarrain_setstate, gensym("setstate"), A_GIMME, 0); + class_addmethod(c,(t_method)disarrain_isetstate, gensym("isetstate"), A_GIMME, 0); + class_addmethod(c,(t_method)disarrain_topfreq, gensym("topfreq"), A_FLOAT, 0); + class_addmethod(c,(t_method)disarrain_fadetime, gensym("fadetime"), A_FLOAT, 0); + class_addmethod(c,(t_method)disarrain_switch_count, gensym("switch_count"), A_FLOAT, 0); + class_addmethod(c,(t_method)disarrain_killfade, gensym("killfade"), 0); + disarrain_class = c; + fftease_announce(OBJECT_NAME); +} + +void disarrain_free(t_disarrain *x) +{ + fftease_free(x->fft); + free(x->fft); + free(x->last_channel); + free(x->composite_channel); + free(x->shuffle_mapping); + free(x->last_shuffle_mapping); + free(x->shuffle_tmp); + free(x->list_data); +} + +void disarrain_init(t_disarrain *x) +{ + int i; + t_float curfreq; + + t_fftease *fft = x->fft; + + t_float c_fundamental; + short initialized = fft->initialized; + + fftease_init(fft); + + int N2 = fft->N2; + int N = fft->N; + int D = fft->D; + int R = fft->R; + c_fundamental = fft->c_fundamental; + if(initialized == 0){ + x->mute = 0; + x->bypass = 0; + x->force_fade = 0; + x->interpolation_duration = 0.1; //seconds + x->shuffle_mapping = (int *) calloc( N2, sizeof(int) ) ; + x->last_shuffle_mapping = (int *) calloc( N2, sizeof(int) ) ; + x->shuffle_tmp = (int *) calloc( N2, sizeof(int) ) ; + x->list_data = (t_atom *) calloc((N+2), sizeof(t_atom) ) ; + x->last_channel = (t_float *) calloc((N+2), sizeof(float)); + x->composite_channel = (t_float *) calloc((N+2), sizeof(float)); + x->reset_flag = 0; + x->new_shuffle_count = 0; + } else { + x->shuffle_mapping = (int *)realloc(x->shuffle_mapping, N2 * sizeof(int)); + x->last_shuffle_mapping = (int *)realloc(x->last_shuffle_mapping, N2 * sizeof(int)); + x->shuffle_tmp = (int *)realloc(x->shuffle_tmp, N2 * sizeof(int)); + x->list_data = (t_atom *)realloc(x->list_data, (N+2) * sizeof(t_atom)); + x->last_channel = (t_float *)realloc(x->last_channel,(N+2) * sizeof(t_float)); + x->composite_channel = (t_float *)realloc(x->composite_channel, (N+2) * sizeof(t_float)); + + } + + if( x->top_frequency < c_fundamental || x->top_frequency > 20000) { + x->top_frequency = 20000.0 ; + } + x->max_bin = 1; + curfreq = 0; + while( curfreq < x->top_frequency ) { + ++(x->max_bin); + curfreq += c_fundamental ; + } + for( i = 0; i < N2; i++ ) { + x->shuffle_mapping[i] = x->last_shuffle_mapping[i] = i*2; + } + reset_shuffle(x); // set shuffle lookup + copy_shuffle_array(x);// copy it to the last lookup (for interpolation) + x->frame_duration = (float) D / (float) R; + x->interpolation_frames = x->interpolation_duration / x->frame_duration; + x->frame_countdown = 0; + x->shuffle_count = 0; + x->last_shuffle_count = 0; + if(x->switchcount > 0){ + disarrain_switch_count (x, (t_float)x->switchcount); + } +} + + +void disarrain_force_switch(t_disarrain *x, t_floatarg f) +{ + x->force_switch = (short)f; +} + + + +void disarrain_fadetime (t_disarrain *x, t_floatarg f) +{ + int frames; + float duration; + + + if(f > 0.0){ + x->interpolation_duration = f * 0.001; + } else { + return; + } + if(! x->fft->initialized){ + return; + } + if(x->frame_duration <= 0.0){ + // error("%s: frame duration %f is too low", OBJECT_NAME, x->frame_duration); + return; + } + // duration = f * .001; + frames = x->interpolation_duration / x->frame_duration; + if( frames <= 1){ + error("%s: fadetime too short",OBJECT_NAME); + return; + } + x->interpolation_frames = frames; +} + +void disarrain_killfade(t_disarrain *x) +{ + x->frame_countdown = 0; + +} + +void *disarrain_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft; + t_disarrain *x = (t_disarrain *)pd_new(disarrain_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->list_outlet = outlet_new(&x->x_obj, gensym("list")); + srand(time(0)); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + + fft->initialized = 0; + x->top_frequency = 3000; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void disarrain_forcefade(t_disarrain *x, t_floatarg toggle) +{ + x->force_fade = (short)toggle; +} + +void disarrain_mute(t_disarrain *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void disarrain_bypass(t_disarrain *x, t_floatarg toggle) +{ + x->bypass = (short)toggle; +} + +void disarrain_fftsize(t_disarrain *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->N = (int) f; + disarrain_init(x); +} + +void disarrain_overlap(t_disarrain *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->overlap = (int) f; + disarrain_init(x); +} + +void disarrain_winfac(t_disarrain *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->winfac = (int) f; + disarrain_init(x); /* calling lighter reinit routine */ +} + +void disarrain_fftinfo( t_disarrain *x ) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} + +void do_disarrain(t_disarrain *x) +{ + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + int N = fft->N; + int N2 = fft->N2; + t_float *last_channel = x->last_channel; + int i,j; + int max = x->max_bin; + int temp, p1, p2; + float tmp; + int *shuffle_mapping = x->shuffle_mapping; + int shuffle_count = x->shuffle_count; + int *last_shuffle_mapping = x->last_shuffle_mapping; + int *shuffle_tmp = x->shuffle_tmp; + int last_shuffle_count = x->last_shuffle_count; + int frame_countdown = x->frame_countdown; // will read from variable + int interpolation_frames = x->interpolation_frames; + float ival = x->ival; + int new_shuffle_count = x->new_shuffle_count; + + + if(x->switchcount_flag){ + + if( new_shuffle_count < 0 ){ + new_shuffle_count = 0; + } + if( new_shuffle_count > N2 ) { + new_shuffle_count = N2; + } + if( new_shuffle_count > x->max_bin){ + new_shuffle_count = x->max_bin; + post("disarrain~: switch constrained to %d", x->max_bin); + } + + memcpy(last_shuffle_mapping, shuffle_mapping, N2 * sizeof(int)); + + x->last_shuffle_count = x->shuffle_count; + x->shuffle_count = new_shuffle_count; + x->frame_countdown = x->interpolation_frames; // force interpolation + + shuffle_count = x->shuffle_count; + frame_countdown = x->frame_countdown; + + x->switchcount_flag = 0; + x->reset_flag = 0; + } + else if(x->reset_flag){ + + memcpy(last_shuffle_mapping, shuffle_mapping, N2 * sizeof(int)); + last_shuffle_count = shuffle_count; + shuffle_count = new_shuffle_count; + // post("%d %d %d", last_shuffle_count, shuffle_count, new_shuffle_count); + + for( i = 0; i < N2; i++ ) { + shuffle_tmp[i] = i; + } + + // crashed before here + for( i = 0; i < max; i++ ) { + p1 = rand() % max; + p2 = rand() % max; + if(p1 < 0 || p1 > max || p2 < 0 || p2 > max){ + error("disarrain~: bad remaps: %d %d against %d", p1, p2, max); + } else { + temp = shuffle_tmp[p1]; + shuffle_tmp[ p1 ] = shuffle_tmp[ p2 ]; + shuffle_tmp[ p2 ] = temp; + } + } + for( i = 0; i < N2; i++ ) { + shuffle_tmp[i] *= 2; + } + frame_countdown = interpolation_frames; + // post("in: countdown: %d, frames: %d", frame_countdown, interpolation_frames); + // dangerous??? + + memcpy(shuffle_mapping, shuffle_tmp, N2 * sizeof(int)); + + x->reset_flag = 0; + } + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_leanconvert(fft); + + // first time for interpolation, just do last frame + + if(frame_countdown == interpolation_frames){ + + for( i = 0, j = 0; i < last_shuffle_count ; i++, j+=2){ + tmp = channel[j]; + channel[j] = channel[last_shuffle_mapping[i]]; + channel[last_shuffle_mapping[i]] = tmp; + } + --frame_countdown; + } + // test only + else if( frame_countdown > 0 ){ + ival = (float)frame_countdown/(float)interpolation_frames; + // copy current frame to lastframe + for(j = 0; j < N; j+=2){ + last_channel[j] = channel[j]; + } + // make last frame swap + for(i = 0, j = 0; i < last_shuffle_count ; i++, j+=2){ + tmp = last_channel[j]; + last_channel[j] = last_channel[last_shuffle_mapping[i]]; + last_channel[last_shuffle_mapping[i]] = tmp; + + } + // make current frame swap + for( i = 0, j = 0; i < shuffle_count ; i++, j+=2){ + tmp = channel[j]; + channel[j] = channel[shuffle_mapping[i]]; + channel[shuffle_mapping[i]] = tmp; + + } + // now interpolate between the two + + for(j = 0; j < N; j+=2){ + channel[j] = channel[j] + ival * (last_channel[j] - channel[j]); + } + + --frame_countdown; + if(frame_countdown <= 0){ + for(i = 0; i<N2; i++){ + last_shuffle_mapping[i] = shuffle_mapping[i]; + } + last_shuffle_count = shuffle_count; + } + } else { + // otherwise straight swapping + for( i = 0, j = 0; i < shuffle_count ; i++, j+=2){ + tmp = channel[j]; + channel[j] = channel[ shuffle_mapping[i]]; + channel[shuffle_mapping[i]] = tmp; + } + ival = 0.0; + } + + fftease_leanunconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); + + + + x->frame_countdown = frame_countdown; + x->last_shuffle_count = last_shuffle_count; + x->shuffle_count = shuffle_count; + x->ival = ival; +} + +t_int *disarrain_perform(t_int *w) +{ + int i,j; + + t_disarrain *x = (t_disarrain *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_float *sync_vec = (t_float *)(w[4]); + t_fftease *fft = x->fft; + t_float *input = fft->input; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + for(i=0; i < MSPVectorSize; i++){ sync_vec[i] = 0.0; } + return w+5; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_disarrain(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_disarrain(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_disarrain(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + /* send out sync signal */ + for(j = 0; j < MSPVectorSize; j++){ + sync_vec[j] = 1.0 - x->ival; + } + return w+5; +} + + +void interpolate_frames_to_channel(t_disarrain *x) +{ + float ival; + float tmp; + int i,j; + int frame_countdown = x->frame_countdown; + int interpolation_frames = x->interpolation_frames; + t_float *channel = x->fft->channel; + t_float *last_channel = x->last_channel; + int *shuffle_mapping = x->shuffle_mapping; + int shuffle_count = x->shuffle_count; + int *last_shuffle_mapping = x->last_shuffle_mapping; + int last_shuffle_count = x->last_shuffle_count; + int local_max_bins; + int N = x->fft->N; + + ival = (t_float)frame_countdown/(t_float)interpolation_frames; + + local_max_bins = (shuffle_count > last_shuffle_count)? shuffle_count : last_shuffle_count; + for(j = 0; j < N; j+=2){ + last_channel[j] = channel[j]; + } + // make last frame + for( i = 0, j = 0; i < last_shuffle_count ; i++, j+=2){ + tmp = last_channel[j]; + last_channel[j] = last_channel[last_shuffle_mapping[i]]; + last_channel[last_shuffle_mapping[i]] = tmp; + } + // make current frame + for( i = 0, j = 0; i < shuffle_count ; i++, j+=2){ + tmp = channel[j]; + channel[j] = channel[shuffle_mapping[i]]; + channel[shuffle_mapping[i]] = tmp; + } + // now interpolate between the two + + for(j = 0; j < N; j+=2){ + channel[j] += ival * (last_channel[j] - channel[j]); + } +} + + + +void disarrain_switch_count (t_disarrain *x, t_floatarg f) +{ + int i = f; + x->switchcount = i; + if(! x->fft->initialized){ + return; + } + if( i < 0 ){ + i = 0; + } + if( i > x->max_bin ) { + i = x->max_bin; + } + x->reset_flag = 1; + x->new_shuffle_count = i; +} + + +void reset_shuffle (t_disarrain *x) +{ + x->reset_flag = 1; +} + +void copy_shuffle_array(t_disarrain *x) +{ + int N2 = x->fft->N2; + int *shuffle_mapping = x->shuffle_mapping; + int *last_shuffle_mapping = x->last_shuffle_mapping; + + memcpy(shuffle_mapping, last_shuffle_mapping, N2 * sizeof(int)); + x->last_shuffle_count = x->shuffle_count; + +} + + +int rand_index(int max) { + return (rand() % max); +} + + +void disarrain_topfreq (t_disarrain *x, t_floatarg freq) +{ + t_float funda = (t_float) x->fft->R / (t_float) x->fft->N; + t_float curfreq; + if(freq <= 0 || freq > 22050){ + post("freq %f is out of range", freq); + return; + } + x->top_frequency = freq; + if(! x->fft->initialized){ + return; + } + funda = (t_float) x->fft->R / (t_float) x->fft->N; + x->max_bin = 1; + curfreq = 0; + while( curfreq < freq ) { + ++(x->max_bin); + curfreq += funda ; + } +} + +void disarrain_list (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int ival; + x->shuffle_count = argc; + for (i=0; i < argc; i++) { + ival = (int)argv[i].a_w.w_float; + if (ival < x->fft->N2) { + x->shuffle_mapping[i] = ival; + } + } + return; +} + + +void disarrain_isetstate (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int ival; + int N2 = x->fft->N2; + + copy_shuffle_array(x); + x->shuffle_count = argc; + + for (i=0; i < argc; i++) { + ival = 2 * atom_getfloatarg(i,argc,argv); + + if ( ival < N2 && ival >= 0) { + x->shuffle_mapping[ i ] = ival; + }else { + error("%s: %d is out of range",OBJECT_NAME, ival); + } + } + + x->frame_countdown = x->interpolation_frames; + return; +} + +void disarrain_setstate (t_disarrain *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int ival; + int N2 = x->fft->N2; + x->shuffle_count = argc; + for (i=0; i < argc; i++) { + ival = 2 *atom_getfloatarg(i,argc,argv); + + if ( ival < N2 && ival >= 0) { + x->shuffle_mapping[ i ] = ival; + } else { + error("%s: %d is out of range",OBJECT_NAME, ival); + } + } + return; +} + +// REPORT CURRENT SHUFFLE STATUS +void disarrain_showstate (t_disarrain *x ) { + + t_atom *list_data = x->list_data; + short i; + for( i = 0; i < x->shuffle_count; i++ ) { + SETFLOAT(list_data+i,(t_float)x->shuffle_mapping[i]/2); + } + outlet_list(x->list_outlet,0,x->shuffle_count,list_data); + return; +} + +void disarrain_dsp(t_disarrain *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + disarrain_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(disarrain_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} + diff --git a/externals/fftease/disarray~.c b/externals/fftease/disarray~.c new file mode 100644 index 000000000..4d27b4f31 --- /dev/null +++ b/externals/fftease/disarray~.c @@ -0,0 +1,403 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *disarray_class; + +#define OBJECT_NAME "disarray~" + + +typedef struct _disarray +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float top_frequency; + int *shuffle_in; + int *shuffle_out; + int shuffle_count; + int max_bin; + void *list_outlet; + t_atom *list_data; + short mute; + short bypass; + long fftsize_attr; + long overlap_attr; +} t_disarray; + +void *disarray_new(t_symbol *msg, short argc, t_atom *argv); +void disarray_dsp(t_disarray *x, t_signal **sp); +t_int *disarray_perform(t_int *w); +void disarray_switch_count (t_disarray *x, t_floatarg i); +void disarray_topfreq (t_disarray *x, t_floatarg freq); +void disarray_fadetime (t_disarray *x, t_floatarg f); +void reset_shuffle( t_disarray *x ); +void disarray_showstate( t_disarray *x ); +void disarray_list (t_disarray *x, t_symbol *msg, short argc, t_atom *argv); +void disarray_setstate (t_disarray *x, t_symbol *msg, short argc, t_atom *argv); +void disarray_isetstate (t_disarray *x, t_symbol *msg, short argc, t_atom *argv); +int rand_index(int max); +void disarray_mute(t_disarray *x, t_floatarg toggle); +void copy_shuffle_array(t_disarray *x); +void interpolate_frames_to_channel(t_disarray *x); +void disarray_killfade(t_disarray *x); +void disarray_forcefade(t_disarray *x, t_floatarg toggle); +void disarray_init(t_disarray *x); +void disarray_free(t_disarray *x); +void disarray_fftinfo(t_disarray *x); +void disarray_force_switch(t_disarray *x, t_floatarg toggle); +void iswitch_count(t_disarray *x, t_int i); +void switch_count (t_disarray *x, t_floatarg i); + +void disarray_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("disarray~"), (t_newmethod)disarray_new, + (t_method)disarray_free,sizeof(t_disarray), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_disarray, x_f); + class_addmethod(c,(t_method)disarray_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)disarray_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)reset_shuffle, gensym("bang"), 0); + class_addmethod(c,(t_method)disarray_showstate,gensym("showstate"),0); + class_addmethod(c,(t_method)disarray_setstate, gensym("setstate"), A_GIMME, 0); + class_addmethod(c,(t_method)disarray_topfreq, gensym("topfreq"), A_FLOAT, 0); + class_addmethod(c,(t_method)switch_count, gensym("switch_count"), A_FLOAT, 0); + disarray_class = c; + fftease_announce(OBJECT_NAME); +} + +void iswitch_count(t_disarray *x, t_int i) +{ + switch_count(x,(t_floatarg)i); +} + +void switch_count (t_disarray *x, t_floatarg i) +{ + if( i < 0 ){ + i = 0; + } + if( i > x->fft->N2 ) { + i = x->fft->N2; + } + x->shuffle_count = i; +} + +void disarray_free(t_disarray *x) +{ + fftease_free(x->fft); + free(x->fft); + free(x->list_data); + free(x->shuffle_in); + free(x->shuffle_out); +} + +void disarray_init(t_disarray *x ) +{ + t_float curfreq; + t_fftease *fft = x->fft; + t_float c_fundamental; + fftease_init(fft); + + int N2 = fft->N2; + int N = fft->N; + short initialized = fft->initialized; + + c_fundamental = fft->c_fundamental; + if(initialized == 0){ + x->mute = 0; + x->bypass = 0; + x->list_data = (t_atom *) calloc((N+2), sizeof(t_atom)) ; + x->shuffle_in = (int *) calloc(N2, sizeof(int)); + x->shuffle_out = (int *) calloc(N2, sizeof(int)); + } else if (initialized == 1) { + x->list_data = (t_atom *)realloc(x->list_data, (N+2) * sizeof(t_atom)); + x->shuffle_in = (int *) realloc(x->shuffle_in, N2 * sizeof(int)); + x->shuffle_out = (int *) realloc(x->shuffle_out, N2 * sizeof(int)); + } + + if(initialized != 2){ + if( x->top_frequency < c_fundamental || x->top_frequency > 20000) { + x->top_frequency = 20000.0 ; + } + x->max_bin = 1; + curfreq = 0; + while( curfreq < x->top_frequency ) { + ++(x->max_bin); + curfreq += c_fundamental ; + } + reset_shuffle(x); // set shuffle lookup + x->shuffle_count = 0; + } +} + +void disarray_topfreq (t_disarray *x, t_floatarg freq) +{ + t_float funda = (t_float) x->fft->R / (t_float) x->fft->N; + t_float curfreq; + + if( freq < funda || freq > 20000) { + post("freq %f is out of range", freq); + return; + } + if(! x->fft->initialized){ + return; + } + x->max_bin = 1; + curfreq = 0; + while( curfreq < freq ) { + ++(x->max_bin); + curfreq += funda ; + } +} + +void *disarray_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft; + + t_disarray *x = (t_disarray *)pd_new(disarray_class); + outlet_new(&x->x_obj, gensym("signal")); + x->list_outlet = outlet_new(&x->x_obj, gensym("list")); + + srand(time(0)); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + + fft->initialized = 0; + x->top_frequency = 15000; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + + +void disarray_mute(t_disarray *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void disarray_bypass(t_disarray *x, t_floatarg toggle) +{ + x->bypass = (short)toggle; +} + +void disarray_fftsize(t_disarray *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->N = (int) f; + disarray_init(x); +} + +void disarray_overlap(t_disarray *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->overlap = (int) f; + disarray_init(x); +} + +void disarray_winfac(t_disarray *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->winfac = (int) f; + disarray_init(x); /* calling lighter reinit routine */ +} + +void disarray_fftinfo( t_disarray *x ) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} + +void do_disarray(t_disarray *x) +{ + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + int i; + t_float tmp; + int shuffle_count = x->shuffle_count; + int *shuffle_in = x->shuffle_in; + int *shuffle_out = x->shuffle_out; + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_leanconvert(fft); + for( i = 0; i < shuffle_count ; i++){ + tmp = channel[ shuffle_in[ i ] * 2 ]; + channel[ shuffle_in[ i ] * 2] = channel[ shuffle_out[ i ] * 2]; + channel[ shuffle_out[ i ] * 2] = tmp; + } + fftease_leanunconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + + +t_int *disarray_perform(t_int *w) +{ + int i,j; + t_disarray *x = (t_disarray *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_fftease *fft = x->fft; + t_float *input = fft->input; + int D = fft->D; + int Nw = fft->Nw; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+4; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_disarray(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_disarray(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_disarray(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+4; +} + + +void reset_shuffle (t_disarray *x) +{ + int i; + int temp, p1, p2; + int max; + + //post("max bin %d",x->max_bin); + max = x->max_bin; + for( i = 0; i < x->fft->N2; i++ ) { + x->shuffle_out[i] = x->shuffle_in[i] = i ; + } + + for( i = 0; i < 10000; i++ ) { + p1 = x->shuffle_out[ rand_index( max ) ]; + p2 = x->shuffle_out[ rand_index( max ) ]; + temp = x->shuffle_out[ p1 ]; + x->shuffle_out[ p1 ] = x->shuffle_out[ p2 ]; + x->shuffle_out[ p2 ] = temp; + } + +} + +int rand_index(int max) { + + return (rand() % max); +} + + + +void disarray_list (t_disarray *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int ival; + x->shuffle_count = argc; + for (i=0; i < argc; i++) { + + ival = (int)atom_getfloatarg(i,argc,argv); + + + if ( ival < x->fft->N2 ) { + x->shuffle_out[ i ] = ival; + } else { + post ("%d out of range",ival); + } + } +} + +void disarray_setstate (t_disarray *x, t_symbol *msg, short argc, t_atom *argv) { + short i; + int ival; + + x->shuffle_count = argc; + for (i=0; i < argc; i++) { + ival = atom_getfloatarg(i,argc,argv); + + if ( ival < x->fft->N2 && ival >= 0) { + x->shuffle_out[ i ] = ival; + } else { + error("%s: %d is out of range",OBJECT_NAME, ival); + } + } +} + +void disarray_showstate (t_disarray *x ) { + + t_atom *list_data = x->list_data; + + short i; + // post("showstate: %d", x->shuffle_count); + for( i = 0; i < x->shuffle_count; i++ ) { + SETFLOAT(list_data+i,(t_float)x->shuffle_out[i]); + // post(x->shuffle_out[i]); + } + outlet_list(x->list_outlet,0,x->shuffle_count,list_data); +} + +void disarray_dsp(t_disarray *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + disarray_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(disarray_perform, 3, x, sp[0]->s_vec, sp[1]->s_vec); + } +} + diff --git a/externals/fftease/drown~.c b/externals/fftease/drown~.c new file mode 100644 index 000000000..9264fb8b6 --- /dev/null +++ b/externals/fftease/drown~.c @@ -0,0 +1,245 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *drown_class; + +#define OBJECT_NAME "drown~" + +typedef struct _drown +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float drownmult; + short mute; + short bypass; + t_float threshold; + short peakflag; +} t_drown; + +t_int *bthresher_perform(t_int *w); +void drown_dsp(t_drown *x, t_signal **sp); +void *drown_new(t_symbol *s, int argc, t_atom *argv); +void drown_mute(t_drown *x, t_floatarg toggle); +void drown_adaptive(t_drown *x, t_floatarg toggle); +void drown_float(t_drown *x, t_float f); +void drown_overlap(t_drown *x, t_floatarg o); +void drown_free(t_drown *x); +void drown_init(t_drown *x); +void drown_fftinfo(t_drown *x); + +void drown_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("drown~"), (t_newmethod)drown_new, + (t_method)drown_free,sizeof(t_drown), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_drown, x_f); + class_addmethod(c,(t_method)drown_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)drown_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)drown_fftinfo,gensym("fftinfo"),0); + class_addmethod(c,(t_method)drown_adaptive,gensym("adaptive"),A_FLOAT,0); + drown_class = c; + fftease_announce(OBJECT_NAME); +} + +void drown_fftsize(t_drown *x, t_floatarg f) +{ + x->fft->N = (int) f; + drown_init(x); +} + +void drown_overlap(t_drown *x, t_floatarg f) +{ + x->fft->overlap = (int) f; + drown_init(x); +} + +void drown_winfac(t_drown *x, t_floatarg f) +{ + x->fft->winfac = (int) f; + drown_init(x); +} + +void drown_fftinfo(t_drown *x) +{ + fftease_fftinfo(x->fft, OBJECT_NAME); +} + +void drown_adaptive(t_drown *x, t_floatarg toggle) +{ + x->peakflag = (short)toggle; +} + +void drown_mute(t_drown *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void drown_bypass(t_drown *x, t_floatarg toggle) +{ + x->bypass = (short)toggle; +} + +void *drown_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_drown *x = (t_drown *)pd_new(drown_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + x->fft->initialized = 0; + x->threshold = 0.001; + x->drownmult = 0.1; + x->mute = 0; + x->peakflag = 1; + x->fft->N = FFTEASE_DEFAULT_FFTSIZE; + x->fft->overlap = FFTEASE_DEFAULT_OVERLAP; + x->fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +void drown_init(t_drown *x) +{ + fftease_init(x->fft); +} + +void drown_free(t_drown *x) +{ + fftease_free(x->fft); + free(x->fft); +} + +void do_drown(t_drown *x) +{ + int i; + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + t_float threshold = x->threshold; + t_float drownmult = x->drownmult; + t_float frame_peak = 0.0, local_thresh; + int N = fft->N; + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_leanconvert(fft); + if(x->peakflag){ + for(i = 0; i < N; i += 2){ + if(frame_peak < channel[i]) + frame_peak = channel[i]; + } + local_thresh = frame_peak * threshold; + } else { + local_thresh = threshold; + } + for(i = 0; i < N; i += 2){ + if(channel[i] < local_thresh) + channel[i] *= drownmult; + } + fftease_leanunconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + +t_int *drown_perform(t_int *w) +{ + int i,j; + t_drown *x = (t_drown *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *threshold = (t_float *)(w[3]); + t_float *drownmult = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + x->threshold = *threshold; + x->drownmult = *drownmult; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_drown(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_drown(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_drown(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void drown_dsp(t_drown *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + drown_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(drown_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} diff --git a/externals/fftease/enrich~.c b/externals/fftease/enrich~.c new file mode 100644 index 000000000..2b4e0a462 --- /dev/null +++ b/externals/fftease/enrich~.c @@ -0,0 +1,366 @@ +/* Pd 32-bit FFTease 3.0 */ + +/* STILL NEEDS Pd Array code installed */ + +#include "fftease.h" + +static t_class *enrich_class; + +#define OBJECT_NAME "enrich~" + +typedef struct _enrich +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_symbol *buffername; + t_float lofreq; + t_float hifreq; + int lo_bin; + int hi_bin; + t_float topfreq; + short mute; + int b_valid; + long b_frames; + t_float *b_samples; +} t_enrich; + +void enrich_dsp(t_enrich *x, t_signal **sp); +t_int *enrich_perform(t_int *w); +void *enrich_new(t_symbol *s, int argc, t_atom *argv); +void enrich_free(t_enrich *x); +void enrich_mute(t_enrich *x, t_floatarg tog); +void enrich_init(t_enrich *x); +void enrich_lowfreq(t_enrich *x, t_floatarg f); +void enrich_highfreq(t_enrich *x, t_floatarg f); +void enrich_fftinfo(t_enrich *x); +void enrich_setbuf(t_enrich *x, t_symbol *newbufname); +void enrich_dolowfreq(t_enrich *x); +void enrich_dohighfreq(t_enrich *x); +void enrich_binstats(t_enrich *x); +void enrich_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("enrich~"), (t_newmethod)enrich_new, + (t_method)enrich_free,sizeof(t_enrich), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_enrich, x_f); + class_addmethod(c,(t_method)enrich_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)enrich_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)enrich_lowfreq,gensym("lowfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)enrich_highfreq,gensym("highfreq"),A_FLOAT,0); + enrich_class = c; + fftease_announce(OBJECT_NAME); +} + +void enrich_mute(t_enrich *x, t_floatarg tog) +{ + x->mute = (short)tog; +} + +void enrich_fftsize(t_enrich *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + fft->N = (int) f; + enrich_init(x); +} + +void enrich_overlap(t_enrich *x, t_floatarg f) +{ + + x->fft->overlap = (int) f; + enrich_init(x); +} + +void enrich_winfac(t_enrich *x, t_floatarg f) +{ + + x->fft->winfac = (int) f; + enrich_init(x); +} + +void enrich_fftinfo(t_enrich *x) +{ + fftease_fftinfo( x->fft, OBJECT_NAME ); +} + +void enrich_free(t_enrich *x ){ + fftease_free(x->fft); + free(x->fft); +} + +void enrich_highfreq(t_enrich *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + + float curfreq; + + if(f < x->lofreq){ + error("current minimum is %f",x->lofreq); + return; + } + if(f > fft->R/2 ){ + f = fft->R/2; + } + x->hifreq = f; + fft->hi_bin = 1; + curfreq = 0; + while(curfreq < x->hifreq) { + ++(fft->hi_bin); + curfreq += fft->c_fundamental; + } +} + +void enrich_lowfreq(t_enrich *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + float curfreq; + + if(f > x->hifreq){ + error("current maximum is %f",x->lofreq); + return; + } + if(f < 0 ){ + f = 0; + } + x->lofreq = f; + fft->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lofreq ) { + ++(fft->lo_bin); + curfreq += fft->c_fundamental ; + } +} + + + +void enrich_dohighfreq(t_enrich *x) +{ + t_fftease *fft = x->fft; + + t_float curfreq; + if( fft->c_fundamental <= 0.0){ + return; + } + if(x->hifreq <= 0.0){ + x->hifreq = 100.0; + } + fft->hi_bin = 1; + curfreq = 0.0; + while(curfreq < x->hifreq) { + ++(fft->hi_bin); + curfreq += fft->c_fundamental; + } +} + +void enrich_dolowfreq(t_enrich *x) +{ + t_fftease *fft = x->fft; + if(x->lofreq < 0){ + x->lofreq = 0.0; + } + if(x->lofreq >= x->hifreq){ + x->lofreq = 0.0; + } + t_float curfreq; + if( fft->c_fundamental <= 0.0){ + return; + } + fft->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lofreq ) { + ++(fft->lo_bin); + curfreq += fft->c_fundamental ; + } +} + + + +void enrich_init(t_enrich *x) +{ + fftease_init(x->fft); + fftease_oscbank_setbins(x->fft, x->lofreq, x->hifreq); +} + +void enrich_setbuf(t_enrich *x, t_symbol *newbufname) +{ + x->buffername = newbufname; +} + +void *enrich_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_enrich *x = (t_enrich *)pd_new(enrich_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ x->buffername = atom_getsymbolarg(0, argc, argv); } + else { post("%s: Must specify array name", OBJECT_NAME); return NULL; } + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + + return x; +} + +void enrich_attachbuf(t_enrich *x) +{ + int frames; + t_symbol *buffername = x->buffername; + t_garray *a; + + x->b_frames = 0; + x->b_valid = 0; + if (!(a = (t_garray *)pd_findbyclass(buffername, garray_class))) + { + if (*buffername->s_name) pd_error(x, "player~: %s: no such array", + buffername->s_name); + } + else if (!garray_getfloatarray(a, &frames, &x->b_samples)) + { + pd_error(x, "%s: bad template for player~", buffername->s_name); + } + else { + x->b_frames = frames; + x->b_valid = 1; + garray_usedindsp(a); + } +} + +void enrich_binstats(t_enrich *x) +{ + post("lo freq %f hi freq %f lo bin %d hi bin %d",x->lofreq, x->fft->lo_bin,x->hifreq,x->fft->hi_bin); +} + +void do_enrich(t_enrich *x) +{ + t_fftease *fft = x->fft; + enrich_dolowfreq(x); + enrich_dohighfreq(x); + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_convert(fft); + fftease_oscbank(fft); +} + +t_int *enrich_perform(t_int *w) +{ + t_enrich *x = (t_enrich *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *transpose = (t_float *)(w[3]); + t_float *synt = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + int i, j; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + t_float *input = fft->input; + t_float *output = fft->output; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + float *b_samples; + + enrich_attachbuf(x); + if(x->mute || ! x->b_valid){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + if(x->b_frames < fft->L){ + post("enrich~: table too small or not mono"); + return w+6; + } + b_samples = x->b_samples; + mult *= fft->N; + + // copy buffer to internal table (try more efficient means later) + for(i = 0; i < fft->L; i++){ + fft->table[i] = b_samples[i]; + } + + + fft->P = *transpose; + fft->synt = *synt; + + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_enrich(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_enrich(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_enrich(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void enrich_dsp(t_enrich *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + enrich_init(x); + enrich_dolowfreq(x); + enrich_dohighfreq(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(enrich_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} + + diff --git a/externals/fftease/ether~.c b/externals/fftease/ether~.c new file mode 100644 index 000000000..c54cbd4e2 --- /dev/null +++ b/externals/fftease/ether~.c @@ -0,0 +1,313 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *ether_class; + +#define OBJECT_NAME "ether~" + + +/* Added a new inlet for the composite index */ + +typedef struct _ether +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; + int invert; + t_float threshMult; + short mute; +} t_ether; + +void ether_dsp(t_ether *x, t_signal **sp); +t_int *ether_perform(t_int *w); +void *ether_new(t_symbol *s, int argc, t_atom *argv); +void ether_invert(t_ether *x, t_floatarg toggle); +void ether_init(t_ether *x); +void ether_free(t_ether *x); +void ether_mute(t_ether *x, t_floatarg toggle); +void ether_tilde_setup(void); + +void ether_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("ether~"), (t_newmethod)ether_new, + (t_method)ether_free,sizeof(t_ether), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_ether, x_f); + class_addmethod(c,(t_method)ether_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)ether_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)ether_invert,gensym("invert"), A_FLOAT, 0); + ether_class = c; + fftease_announce(OBJECT_NAME); +} + +void ether_free(t_ether *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void *ether_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_ether *x = (t_ether *)pd_new(ether_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +void ether_init(t_ether *x) +{ + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->mute = 0; + x->invert = 0; + x->threshMult = 0.; + } else { + x->fft->input = (t_float *) realloc(fft->input,fft->Nw * sizeof(t_float)); + x->fft2->input = (t_float *) realloc(fft2->input,fft2->Nw * sizeof(t_float)); + x->fft->output = (t_float *) realloc(fft->output,fft->Nw * sizeof(t_float)); + + } +} + +void do_ether(t_ether *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int N2 = fft->N2; + float a1, b1, a2, b2; + int even, odd; + int invert = x->invert; + t_float threshMult = x->threshMult; + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + t_float *channelOne = fft->channel; + t_float *channelTwo = fft2->channel; + + fftease_fold(fft); + fftease_fold(fft2); + fftease_rdft(fft,1); + fftease_rdft(fft2,1); + + if (invert) { + + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + + if ( *(channelOne+even) > *(channelTwo+even) * threshMult ) + *(channelOne+even) = *(channelTwo+even); + + if ( *(channelOne+odd) == 0. ) + *(channelOne+odd) = *(channelTwo+odd); + } + } + + else { + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + + + if ( *(channelOne+even) < *(channelTwo+even) * threshMult ) + *(channelOne+even) = *(channelTwo+even); + + if ( *(channelOne+odd) == 0. ) + *(channelOne+odd) = *(channelTwo+odd); + } + } + + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + fftease_rdft(fft, -1); + fftease_overlapadd(fft); +} + +t_int *ether_perform(t_int *w) +{ + int i,j; + t_ether *x = (t_ether *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *vec_threshMult = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + + x->threshMult = *vec_threshMult; + + if ( x->threshMult == 0. ){ + x->threshMult = 0.0001; + } + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_ether(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_ether(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_ether(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void ether_mute(t_ether *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void ether_invert(t_ether *x, t_floatarg toggle) +{ + x->invert = (int)toggle; +} + +void ether_dsp(t_ether *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + ether_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(ether_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); + } +} + diff --git a/externals/fftease/fft.c b/externals/fftease/fft.c new file mode 100644 index 000000000..aadac03a9 --- /dev/null +++ b/externals/fftease/fft.c @@ -0,0 +1,159 @@ +#include "fftease.h" + +/* If forward is true, rfft replaces 2*N real data points in x with + N complex values representing the positive frequency half of their + Fourier spectrum, with x[1] replaced with the real part of the Nyquist + frequency value. If forward is false, rfft expects x to contain a + positive frequency spectrum arranged as before, and replaces it with + 2*N real values. N MUST be a power of 2. */ + +void fftease_rfft( t_float *x, int N, int forward ) + +{ + t_float c1,c2, + h1r,h1i, + h2r,h2i, + wr,wi, + wpr,wpi, + temp, + theta; + t_float xr,xi; + int i, + i1,i2,i3,i4, + N2p1; + static int first = 1; +/*t_float PI, TWOPI;*/ +void fftease_cfft(); + + if ( first ) { + + first = 0; + } + theta = PI/N; + wr = 1.; + wi = 0.; + c1 = 0.5; + if ( forward ) { + c2 = -0.5; + fftease_cfft( x, N, forward ); + xr = x[0]; + xi = x[1]; + } else { + c2 = 0.5; + theta = -theta; + xr = x[1]; + xi = 0.; + x[1] = 0.; + } + wpr = -2.*pow( sin( 0.5*theta ), 2. ); + wpi = sin( theta ); + N2p1 = (N<<1) + 1; + for ( i = 0; i <= N>>1; i++ ) { + i1 = i<<1; + i2 = i1 + 1; + i3 = N2p1 - i2; + i4 = i3 + 1; + if ( i == 0 ) { + h1r = c1*(x[i1] + xr ); + h1i = c1*(x[i2] - xi ); + h2r = -c2*(x[i2] + xi ); + h2i = c2*(x[i1] - xr ); + x[i1] = h1r + wr*h2r - wi*h2i; + x[i2] = h1i + wr*h2i + wi*h2r; + xr = h1r - wr*h2r + wi*h2i; + xi = -h1i + wr*h2i + wi*h2r; + } else { + h1r = c1*(x[i1] + x[i3] ); + h1i = c1*(x[i2] - x[i4] ); + h2r = -c2*(x[i2] + x[i4] ); + h2i = c2*(x[i1] - x[i3] ); + x[i1] = h1r + wr*h2r - wi*h2i; + x[i2] = h1i + wr*h2i + wi*h2r; + x[i3] = h1r - wr*h2r + wi*h2i; + x[i4] = -h1i + wr*h2i + wi*h2r; + } + wr = (temp = wr)*wpr - wi*wpi + wr; + wi = wi*wpr + temp*wpi + wi; + } + if ( forward ) + x[1] = xr; + else + fftease_cfft( x, N, forward ); +} + +/* cfft replaces t_float array x containing NC complex values + (2*NC t_float values alternating real, imagininary, etc.) + by its Fourier transform if forward is true, or by its + inverse Fourier transform if forward is false, using a + recursive Fast Fourier transform method due to Danielson + and Lanczos. NC MUST be a power of 2. */ + +void fftease_cfft( t_float *x, int NC, int forward ) + +{ + t_float wr,wi, + wpr,wpi, + theta, + scale; + int mmax, + ND, + m, + i,j, + delta; + +void fftease_bitreverse(); + + ND = NC<<1; + fftease_bitreverse( x, ND ); + for ( mmax = 2; mmax < ND; mmax = delta ) { + delta = mmax<<1; + theta = TWOPI/( forward? mmax : -mmax ); + wpr = -2.*pow( sin( 0.5*theta ), 2. ); + wpi = sin( theta ); + wr = 1.; + wi = 0.; + for ( m = 0; m < mmax; m += 2 ) { + register t_float rtemp, itemp; + for ( i = m; i < ND; i += delta ) { + j = i + mmax; + rtemp = wr*x[j] - wi*x[j+1]; + itemp = wr*x[j+1] + wi*x[j]; + x[j] = x[i] - rtemp; + x[j+1] = x[i+1] - itemp; + x[i] += rtemp; + x[i+1] += itemp; + } + wr = (rtemp = wr)*wpr - wi*wpi + wr; + wi = wi*wpr + rtemp*wpi + wi; + } + } + +/* scale output */ + + scale = forward ? 1./ND : 2.; + { register t_float *xi=x, *xe=x+ND; + while ( xi < xe ) + *xi++ *= scale; + } +} + +/* bitreverse places t_float array x containing N/2 complex values + into bit-reversed order */ + +void fftease_bitreverse( t_float *x, int N ) + +{ + t_float rtemp,itemp; + int i,j, + m; + + for ( i = j = 0; i < N; i += 2, j += m ) { + if ( j > i ) { + rtemp = x[j]; itemp = x[j+1]; /* complex exchange */ + x[j] = x[i]; x[j+1] = x[i+1]; + x[i] = rtemp; x[i+1] = itemp; + } + for ( m = N>>1; m >= 2 && j >= m; m >>= 1 ) + j -= m; + } +} diff --git a/externals/fftease/fft4.c b/externals/fftease/fft4.c new file mode 100644 index 000000000..8181e4758 --- /dev/null +++ b/externals/fftease/fft4.c @@ -0,0 +1,336 @@ +#include <math.h> +#include "fftease.h" + +/* forward declarations */ +static void rftsub(int n, t_float *a, int nc, t_float *c); +static void fftease_bitrv2(int n, int *ip, t_float *a); +static void fftease_cftsub(int n, t_float *a, t_float *w); + +void fftease_init_rdft(int n, int *ip, t_float *w) +{ + + int nw, + nc; + + void fftease_makewt(int nw, int *ip, t_float *w); + void fftease_makect(int nc, int *ip, t_float *c); + nw = n >> 2; + fftease_makewt(nw, ip, w); + + nc = n >> 2; + fftease_makect(nc, ip, w + nw); + + return; +} + + +void fftease_rdft(t_fftease *fft, int isgn) +{ + int n = fft->N; + t_float *a = fft->buffer; + int *ip = fft->bitshuffle; + t_float *w = fft->trigland; + + int j, nw, nc; + + t_float xi; + + + nw = ip[0]; + nc = ip[1]; + + if (isgn < 0) { + a[1] = 0.5 * (a[1] - a[0]); + a[0] += a[1]; + + for (j = 3; j <= n - 1; j += 2) { + a[j] = -a[j]; + } + + if (n > 4) { + rftsub(n, a, nc, w + nw); + fftease_bitrv2(n, ip + 2, a); + } + + fftease_cftsub(n, a, w); + + for (j = 1; j <= n - 1; j += 2) { + a[j] = -a[j]; + } + } + + else { + + if (n > 4) { + fftease_bitrv2(n, ip + 2, a); + } + + fftease_cftsub(n, a, w); + + if (n > 4) { + rftsub(n, a, nc, w + nw); + } + + xi = a[0] - a[1]; + a[0] += a[1]; + a[1] = xi; + } +} + + +void fftease_bitrv2(int n, int *ip, t_float *a) +{ + int j, j1, k, k1, l, m, m2; + t_float xr, xi; + + ip[0] = 0; + l = n; + m = 1; + + while ((m << 2) < l) { + l >>= 1; + for (j = 0; j <= m - 1; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + + if ((m << 2) > l) { + + for (k = 1; k <= m - 1; k++) { + + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } + + else { + m2 = m << 1; + + for (k = 1; k <= m - 1; k++) { + + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += m2; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } +} + + +void fftease_cftsub(int n, t_float *a, t_float *w) +{ + int j, j1, j2, j3, k, k1, ks, l, m; + t_float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + t_float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 2; + + while ((l << 1) < n) { + m = l << 2; + + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[j1] = x1r - x3i; + a[j1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + + if (m < n) { + wk1r = w[2]; + + for (j = m; j <= l + m - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x2i - x0i; + a[j2 + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * (x0r - x0i); + a[j1 + 1] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[j3] = wk1r * (x0i - x0r); + a[j3 + 1] = wk1r * (x0i + x0r); + } + + k1 = 1; + ks = -1; + + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + + for (j = k; j <= l + k - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[j] + a[j1]; + x0i = a[j + 1] + a[j1 + 1]; + x1r = a[j] - a[j1]; + x1i = a[j + 1] - a[j1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = wk2r * x0r - wk2i * x0i; + a[j2 + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1] = wk1r * x0r - wk1i * x0i; + a[j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + } + } + + l = m; + } + + if (l < n) { + + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + x0r = a[j] - a[j1]; + x0i = a[j + 1] - a[j1 + 1]; + a[j] += a[j1]; + a[j + 1] += a[j1 + 1]; + a[j1] = x0r; + a[j1 + 1] = x0i; + } + } +} + + +static void rftsub(int n, t_float *a, int nc, t_float *c) +{ + int j, k, kk, ks; + t_float wkr, wki, xr, xi, yr, yi; + + ks = (nc << 2) / n; + kk = 0; + + for (k = (n >> 1) - 2; k >= 2; k -= 2) { + j = n - k; + kk += ks; + wkr = 0.5 - c[kk]; + wki = c[nc - kk]; + xr = a[k] - a[j]; + xi = a[k + 1] + a[j + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[k] -= yr; + a[k + 1] -= yi; + a[j] += yr; + a[j + 1] -= yi; + } +} + + +void fftease_makewt(int nw, int *ip, t_float *w) +{ + void fftease_bitrv2(int n, int *ip, t_float *a); + int nwh, j; + t_float delta, x, y; + + ip[0] = nw; + ip[1] = 1; + if (nw > 2) { + nwh = nw >> 1; + delta = atan(1.0) / nwh; + w[0] = 1; + w[1] = 0; + w[nwh] = cos(delta * nwh); + w[nwh + 1] = w[nwh]; + for (j = 2; j <= nwh - 2; j += 2) { + x = cos(delta * j); + y = sin(delta * j); + w[j] = x; + w[j + 1] = y; + w[nw - j] = y; + w[nw - j + 1] = x; + } + fftease_bitrv2(nw, ip + 2, w); + } +} + + +void fftease_makect(int nc, int *ip, t_float *c) +{ + int nch, j; + t_float delta; + + ip[1] = nc; + if (nc > 1) { + nch = nc >> 1; + delta = atan(1.0) / nch; + c[0] = 0.5; + c[nch] = 0.5 * cos(delta * nch); + for (j = 1; j <= nch - 1; j++) { + c[j] = 0.5 * cos(delta * j); + c[nc - j] = 0.5 * sin(delta * j); + } + } +} + diff --git a/externals/fftease/fftease-meta.pd b/externals/fftease/fftease-meta.pd new file mode 100644 index 000000000..eac3c0693 --- /dev/null +++ b/externals/fftease/fftease-meta.pd @@ -0,0 +1,6 @@ +#N canvas 15 49 195 101 10; +#N canvas 285 484 420 300 META 0; +#X text 10 25 AUTHOR ericlyon@vt.edu; +#X text 13 41 NAME FFTease; +#X text 10 10 VERSION 3; +#X restore 10 10 pd META; diff --git a/externals/fftease/fftease.h b/externals/fftease/fftease.h new file mode 100644 index 000000000..15351862c --- /dev/null +++ b/externals/fftease/fftease.h @@ -0,0 +1,177 @@ +/* 32-bit version for Pd */ + +#include <stdio.h> +#include <math.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include "m_pd.h" + +#define MAX_N 1073741824 +#define MAX_Nw MAX_N + +#define FFTEASE_ANNOUNCEMENT "<[ FFTease 3.0 ]> | " +#define FFTEASE_VERSION "FFTease 3.0 for Pd 32-bit version" +#define FFTEASE_COMPILE_DATE "June 20, 2014" + +#define fftease_announce(objname) post("%s ( %s )",FFTEASE_ANNOUNCEMENT,objname) + +#define fftease_version(objectname) post("%s: version %s compiled %s",objectname,FFTEASE_VERSION,FFTEASE_COMPILE_DATE); + +#define BIGGER_THAN_MSP_VECTOR 0 +#define SMALLER_THAN_MSP_VECTOR 1 +#define EQUAL_TO_MSP_VECTOR 2 + +#define FFTEASE_DEFAULT_FFTSIZE 1024 +#define FFTEASE_DEFAULT_OVERLAP 8 +#define FFTEASE_DEFAULT_WINFAC 1 + +#define DEFAULT_FFTEASE_FFTSIZE 1024 +#define FFTEASE_MAX_FFTSIZE 1073741824 + +#define FFTEASE_OSCBANK_SCALAR (0.25) +#define FFTEASE_OSCBANK_TABLESIZE (8192) +#define FFTEASE_BYPASS_GAIN (0.5) + +#define FFT_FORWARD 1 +#define FFT_INVERSE -1 + +#ifndef PIOVERTWO +#define PIOVERTWO 1.5707963268 +#endif +#ifndef TWOPI +#define TWOPI 6.2831853072 +#endif +#ifndef PI +#define PI 3.14159265358979 +#endif + +typedef struct _fftease +{ + int R; + int N; + int N2; + int Nw; + int Nw2; + int D; + int in_count; + int out_count; + t_float *Wanal; + t_float *Wsyn; + t_float *input; + t_float *Hwin; + t_float *buffer; + t_float *channel; + t_float *output; + // for convert + t_float *c_lastphase_in; + t_float *c_lastphase_out; + t_float c_fundamental; + t_float c_factor_in; + t_float c_factor_out; + // for oscbank + int NP; + t_float P; + int L; + int first; + t_float Iinv; + t_float *lastamp; + t_float *lastfreq; + t_float *bindex; + t_float *table; + t_float pitch_increment; + t_float ffac; + int hi_bin; + int lo_bin; + // for fast fft + t_float mult; + t_float *trigland; + int *bitshuffle; + int overlap; + int winfac; + int last_overlap; // save values to test if memory reallocation needed + int last_winfac; + int last_N; + int last_R; + t_float synt; + t_float *internalInputVector; // hold input data from smaller MSP buffers + t_float *internalOutputVector; // hold output data for smaller MSP buffers + int operationRepeat; // how many times to do whatever on each perform call + int operationCount; // keep track of where we are in buffer operation + int bufferStatus; // relations between MSP vector size and internal buffer size + int MSPVectorSize; // what it says + short obank_flag; // resynthesis method flag + short init_status; // whether initialization has successfully occurred + short noalias; // inhibit aliasing in oscbank mode + t_float nyquist; // nyquest frequency == R/2 + short initialized; // set to 0 for the first time in new(); after that it will be 1 +} t_fftease; + + + +void fftease_convert(t_fftease *fft); +void fftease_unconvert(t_fftease *fft); +void fftease_rfft( t_float *x, int N, int forward ); +void fftease_cfft( t_float *x, int NC, int forward ); +void fftease_bitreverse( t_float *x, int N ); +void fftease_fold( t_fftease *fft ); +void fftease_init_rdft(int n, int *ip, t_float *w); +void fftease_rdft(t_fftease *fft, int isgn); +//void fftease_bitrv2(int n, int *ip, t_float *a); +//void fftease_cftsub(int n, t_float *a, t_float *w); +//void rftsub(int n, t_float *a, int nc, t_float *c); +void fftease_makewt(int nw, int *ip, t_float *w); +void fftease_makect(int nc, int *ip, t_float *c); +void fftease_leanconvert(t_fftease *fft); +void fftease_leanunconvert(t_fftease *fft); +void fftease_makewindows( t_float *H, t_float *A, t_float *S, int Nw, int N, int I ); +void fftease_makehamming( t_float *H, t_float *A, t_float *S, int Nw, int N, int I,int odd ); +void fftease_makehanning( t_float *H, t_float *A, t_float *S, int Nw, int N, int I,int odd ); +void fftease_overlapadd(t_fftease *fft); +void fftease_bloscbank( t_float *S, t_float *O, int D, t_float iD, t_float *lf, t_float *la, + t_float *bindex, t_float *tab, int len, t_float synt, int lo, int hi ); +void fftease_oscbank( t_fftease *fft ); +//t_float randf( t_float min, t_float max ); +//int randi( int min, int max ); +int fftease_power_of_two(int test); +void fftease_limit_fftsize(int *N, int *Nw, char *OBJECT_NAME); +int fftease_fft_size(int testfft); +void fftease_free(t_fftease *fft); +void fftease_init(t_fftease *fft); +int fftease_winfac(int winfac); +int fftease_overlap(int overlap); +void fftease_set_fft_buffers(t_fftease *fft); +void fftease_fftinfo(t_fftease *fft, char *object_name); +int fftease_msp_sanity_check(t_fftease *fft, char *oname); +t_float fftease_randf(t_float min, t_float max); +void fftease_noalias(t_fftease* fft, short flag); +void fftease_oscbank_setbins(t_fftease *fft, t_float lowfreq, t_float highfreq); +void fftease_limited_oscbank(t_fftease *fft, int osclimit, t_float framethresh); +t_float fftease_randf(t_float min, t_float max); +// Penrose extras +t_float fftease_frequencyToIncrement( t_float samplingRate, t_float frequency, int bufferLength ); +void fftease_makeSineBuffer( t_float *buffer, int bufferLength ); +t_float fftease_bufferOscil( t_float *phase, t_float increment, t_float *buffer, int bufferLength ); +float fftease_rrand(int *seed); +float fftease_prand(int *seed); + +/*** MSP helper functions, thanks JKC! ***/ +/* +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); + +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av) +{ + if (c&&ac&&av&&(idx<ac)) { + *c = atom_getfloat(av+idx); + } +} + +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av) +{ + if (c&&ac&&av&&(idx<ac)) { + *c = atom_getsymbol(av+idx); + } +} +*/ + diff --git a/externals/fftease/fftease32-helpfiles/bthresher~-help.pd b/externals/fftease/fftease32-helpfiles/bthresher~-help.pd new file mode 100644 index 000000000..eab7fbc93 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/bthresher~-help.pd @@ -0,0 +1,52 @@ +#N canvas 1169 280 575 554 10; +#X obj 153 209 bthresher~; +#X obj 29 180 noise~; +#X obj 155 293 *~ 0.05; +#X obj 156 350 dac~; +#X msg 259 335 \; pd dsp \$1; +#X obj 259 304 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 218 242 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 1500 1; +#X floatatom 194 273 5 0 0 0 - - -, f 5; +#X floatatom 258 174 5 0 0 0 - - -, f 5; +#X obj 261 148 hsl 128 15 0.25 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 12700 1; +#X floatatom 182 124 5 0 0 0 - - -, f 5; +#X obj 185 98 hsl 128 15 0.5 1.25 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 12700 1; +#X obj 38 358 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 63 146 r fftz.bthresh.msg; +#X obj 38 525 s fftz.bthresh.msg; +#X msg 39 390 inf_hold 0; +#X text 129 392 broken!; +#X msg 208 405 oscbank \$1; +#X obj 217 374 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 332 403 max_hold 100000; +#X msg 330 493 transpose \$1; +#X floatatom 329 471 5 0 0 0 - - -, f 5; +#X obj 332 445 hsl 128 15 0.25 1.1 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 8100 1; +#X text 415 492 (oscbank only); +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 2 1; +#X connect 8 0 0 2; +#X connect 9 0 8 0; +#X connect 10 0 0 1; +#X connect 11 0 10 0; +#X connect 12 0 15 0; +#X connect 13 0 0 0; +#X connect 15 0 14 0; +#X connect 17 0 14 0; +#X connect 18 0 17 0; +#X connect 19 0 14 0; +#X connect 20 0 14 0; +#X connect 21 0 20 0; +#X connect 22 0 21 0; diff --git a/externals/fftease/fftease32-helpfiles/burrow~-help.pd b/externals/fftease/fftease32-helpfiles/burrow~-help.pd new file mode 100644 index 000000000..3a0f140fd --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/burrow~-help.pd @@ -0,0 +1,86 @@ +#N canvas 579 460 937 510 10; +#X obj 246 254 burrow~; +#X obj 246 336 *~ 0.05; +#X obj 246 394 dac~; +#X msg 350 378 \; pd dsp \$1; +#X obj 350 347 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 288 294 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 8200 1; +#X floatatom 285 316 5 0 0 0 - - -, f 5; +#X floatatom 436 79 5 -90 0 0 - - -, f 5; +#X obj 424 183 pow; +#X msg 424 154 10; +#X obj 436 103 * 0.05; +#X obj 436 131 t b f; +#X text 430 60 filtering threshold (dB); +#X floatatom 609 82 5 0 0 0 - - -, f 5; +#X obj 597 186 pow; +#X msg 597 157 10; +#X obj 609 106 * 0.05; +#X obj 609 134 t b f; +#X text 603 63 filtering multiplier (dB); +#X msg 63 270 invert \$1; +#X obj 63 237 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 77 100 phasor~ 200; +#X obj 77 129 -~ 0.5; +#X obj 193 101 noise~; +#X obj 235 165 bp~ 600 30; +#X floatatom 270 110 5 0 0 0 - - -, f 5; +#X text 194 77 filtering sound; +#X text 508 233 burrow~ filters the sound in the left input by utlizing +a second signal input as a filter threshold reference. The threshold +controls the extent of the filtering. Threshold inversion is available +via the invert message. Since the spectral shape of the second sound +is *subtracted* from the first \, the normal behavior of burrow~ is +inverse to more familiar filtering. When the "inverse" flag is set +\, the second sound becomes a positive (and perhaps more intuitively +understandable) filter.; +#X msg 63 212 1; +#X obj 63 181 loadbang; +#X obj 320 28 loadbang; +#X msg 320 50 600; +#X obj 797 61 loadbang; +#X msg 797 83 -20; +#X obj 506 12 loadbang; +#X msg 506 34 -45; +#X text 73 78 source sound; +#X msg 112 355 mute \$1; +#X obj 112 328 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 6 0 1 1; +#X connect 7 0 10 0; +#X connect 8 0 0 2; +#X connect 9 0 8 0; +#X connect 10 0 11 0; +#X connect 11 0 9 0; +#X connect 11 1 8 1; +#X connect 13 0 16 0; +#X connect 14 0 0 3; +#X connect 15 0 14 0; +#X connect 16 0 17 0; +#X connect 17 0 15 0; +#X connect 17 1 14 1; +#X connect 19 0 0 0; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 0 0; +#X connect 23 0 24 0; +#X connect 24 0 0 1; +#X connect 25 0 24 1; +#X connect 28 0 20 0; +#X connect 29 0 28 0; +#X connect 30 0 31 0; +#X connect 31 0 25 0; +#X connect 32 0 33 0; +#X connect 33 0 13 0; +#X connect 34 0 35 0; +#X connect 35 0 7 0; +#X connect 37 0 0 0; +#X connect 38 0 37 0; diff --git a/externals/fftease/fftease32-helpfiles/cavoc27~-help.pd b/externals/fftease/fftease32-helpfiles/cavoc27~-help.pd new file mode 100644 index 000000000..8d034cffb --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/cavoc27~-help.pd @@ -0,0 +1,120 @@ +#N canvas 1082 165 576 304 10; +#X obj 160 156 cavoc27~; +#X obj 193 199 *~ 0.05; +#X obj 193 257 dac~; +#X obj 235 157 hsl 128 15 0 1 0 0 empty cavoc27-gain Gain -2 -8 0 10 +-262144 -1 -1 0 1; +#X floatatom 232 179 5 0 0 0 - - -, f 5; +#X obj 229 110 r fftz.cavoc27.msgs; +#N canvas 1379 450 450 300 rules 0; +#X obj 65 222 s fftz.cavoc27.msgs; +#X msg 29 88 rule 1 0 1 0 0 0 1 0 0 1 2 1 0 2 0 2 0 0 1 0 2 0 2 1 2 +1 1; +#X msg 51 115 rule 0 2 1 0 0 1 0 0 0 1 1 2 0 1 2 1 1 1 1 0 0 0 1 1 +0 1 1; +#X msg 73 143 rule 2 2 0 1 0 2 1 1 0 2 1 2 0 1 1 2 0 2 2 1 2 1 1 2 +0 0 0; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X restore 36 132 pd rules; +#N canvas 1371 522 450 300 triggering 0; +#X obj 65 222 s fftz.cavoc27.msgs; +#X msg 65 163 trigger; +#X msg 204 160 manual \$1; +#X obj 204 128 tgl 15 0 empty cavoc27-triggertog empty 17 7 0 10 -262144 +-1 -1 0 1; +#X obj 65 128 metro 250; +#X obj 64 72 tgl 15 0 empty cavoc27-metro-tog empty 17 7 0 10 -262144 +-1 -1 0 1; +#X floatatom 103 99 5 0 0 0 - - -, f 5; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 4 0; +#X connect 6 0 4 1; +#X restore 35 156 pd triggering; +#N canvas 221 259 450 300 init 0; +#X obj 28 34 loadbang; +#X msg 28 62 \; cavoc27-triggertog 0 \; cavoc27-metro-tog 1 \; cavoc27-infreq +133 \; cavoc27-gain 0.02 \; cavoc27-holdtime 250 \;; +#X connect 0 0 1 0; +#X restore 35 178 pd init; +#X text 228 250 cavoc27~ generates spectra with a 27 rule cellular +automaton. Start with very low gain.; +#N canvas 1167 563 450 300 sample-input-spectrum 1; +#X msg 237 101 capture_spectrum \$1; +#X obj 237 70 inlet; +#X floatatom 22 31 5 0 0 0 - cavoc27-infreq -, f 5; +#X obj 20 111 phasor~; +#X obj 20 137 -~ 0.5; +#X obj 73 111 phasor~; +#X obj 73 137 -~ 0.5; +#X obj 128 112 phasor~; +#X obj 128 138 -~ 0.5; +#X obj 36 185 *~ 0.5; +#X obj 35 236 outlet~; +#X obj 60 73 * 1.25; +#X obj 126 74 * 1.5; +#X obj 237 133 s fftz.cavoc27.msgs; +#X connect 0 0 13 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 2 0 11 0; +#X connect 2 0 12 0; +#X connect 3 0 4 0; +#X connect 4 0 9 0; +#X connect 5 0 6 0; +#X connect 6 0 9 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 11 0 5 0; +#X connect 12 0 7 0; +#X restore 160 82 pd sample-input-spectrum; +#X obj 160 41 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#N canvas 637 695 517 307 more-msgs 0; +#X obj 31 268 s fftz.cavoc27.msgs; +#X msg 43 184 density \$1; +#X floatatom 43 154 5 0 0 0 - - -, f 5; +#X msg 31 99 oscbank \$1; +#X obj 31 60 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 215 66 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 215 103 interpolate \$1; +#X msg 317 180 transpose \$1; +#X floatatom 317 151 5 0 0 0 - - -, f 5; +#X obj 320 102 hsl 128 15 0.5 2 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 8300 1; +#X msg 221 226 retune 0.5 2; +#X msg 351 247 freeze \$1; +#X obj 351 219 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 158 178 hold_time \$1; +#X floatatom 193 151 5 0 0 0 - cavoc27-holdtime -, f 5; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 11 0; +#X connect 13 0 0 0; +#X connect 14 0 13 0; +#X restore 35 215 pd more-msgs; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 5 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 10 0; diff --git a/externals/fftease/fftease32-helpfiles/cavoc~-help.pd b/externals/fftease/fftease32-helpfiles/cavoc~-help.pd new file mode 100644 index 000000000..79f3794aa --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/cavoc~-help.pd @@ -0,0 +1,78 @@ +#N canvas 979 487 505 383 10; +#X obj 193 107 cavoc~; +#X obj 193 199 *~ 0.05; +#X obj 193 230 dac~; +#X obj 235 159 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 232 179 5 0 0 0 - - -, f 5; +#X text 16 323 cavoc~ generates spectra with an 8 rule cellular automaton. +Start with very low gain.; +#X obj 193 75 r fftz.cavoc.msgs; +#N canvas 1230 207 504 565 more-messages 0; +#X obj 74 472 s fftz.cavoc.msgs; +#X msg 70 129 retune 0.5 1.5; +#X msg 273 163 bottomfreq \$1; +#X msg 231 84 topfreq \$1; +#X floatatom 232 49 8 500 8000 0 - - -, f 8; +#X floatatom 271 134 8 0 400 0 - - -, f 8; +#X msg 23 103 mute \$1; +#X obj 23 73 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X obj 99 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 99 60 external_trigger \$1; +#X msg 170 163 bang; +#X msg 259 259 hold_time \$1; +#X floatatom 258 230 5 100 1000 0 - - -, f 5; +#X floatatom 328 49 5 0.01 0.25 0 - - -, f 5; +#X msg 328 68 density \$1; +#X msg 270 387 oscbank \$1; +#X obj 278 347 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 326 26 hsl 128 15 0.01 0.2 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 0 1; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 11 0; +#X connect 13 0 14 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 15 0; +#X connect 17 0 13 0; +#X restore 30 247 pd more-messages; +#N canvas 805 281 465 670 rules 0; +#X obj 30 503 s fftz.cavoc.msgs; +#X msg 87 107 rule 0 1 0 1 0 0 1 1; +#X msg 59 79 rule 0 1 1 0 1 0 0 1; +#X msg 122 127 rule 0 0 0 0 1 1 1 1; +#X msg 129 158 rule 0 0 0 1 1 0 0 0; +#X msg 153 215 rule 1 0 0 1 1 0 0 1; +#X msg 180 259 rule 1 1 0 1 0 1 0 0; +#X msg 205 302 rule 1 1 0 1 0 1 1 0; +#X msg 223 342 rule 1 1 0 0 1 1 0 0; +#X msg 233 387 rule 0 0 1 0 1 0 1 1; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X restore 27 105 pd rules; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 6 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/centerring~-help.pd b/externals/fftease/fftease32-helpfiles/centerring~-help.pd new file mode 100644 index 000000000..21b9a59ac --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/centerring~-help.pd @@ -0,0 +1,51 @@ +#N canvas 1282 501 452 406 10; +#X obj 126 116 centerring~; +#X obj 126 198 *~ 0.05; +#X obj 126 256 dac~; +#X obj 168 156 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 9200 1; +#X floatatom 165 178 5 0 0 0 - - -, f 5; +#X obj 125 34 phasor~ 67; +#X obj 125 59 -~ 0.5; +#X obj 126 87 *~ 2; +#X floatatom 125 11 5 0 0 0 - - -, f 5; +#X floatatom 244 56 5 0 0 0 base centerring-basefreq -, f 5; +#X floatatom 259 77 5 0 0 0 bw centerring-freqbandw -, f 5; +#X floatatom 291 96 5 0 0 0 const centerring-freqconst -, f 5; +#X msg 8 60 zerophases; +#X msg 15 127 randphases; +#N canvas 804 464 450 300 init 0; +#X msg 60 85 \; centerring-basefreq 1 \; centerring-freqbandw 0.15 +\; centerring-freqconst 1 \;; +#X msg 132 216 \; centerring-basefreq \$1 \; centerring-freqbandw \$2 +\; centerring-freqconst \$3 \;; +#X msg 81 167 300 0.2 1; +#X msg 164 168 1.1 10 7; +#X msg 249 169 1 1 1; +#X obj 57 54 loadbang; +#X text 82 146 a few other settings; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 0 0; +#X restore 261 225 pd init; +#X text 21 279 centerring~ performs frequency independent amplitude +modulation upon the spectral magnitudes of input signals. The effect +is somewhat akin to flanging. The base frequency is used to derive +the frequency of an oscillator associated with each frequency band. +The frequency bandwidth and constant control the deviation of a particular +frequency band's modulation oscillator frequency.; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 0 0; +#X connect 8 0 5 0; +#X connect 9 0 0 1; +#X connect 10 0 0 2; +#X connect 11 0 0 3; +#X connect 12 0 0 0; +#X connect 13 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/codepend~-help.pd b/externals/fftease/fftease32-helpfiles/codepend~-help.pd new file mode 100644 index 000000000..0523f9e72 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/codepend~-help.pd @@ -0,0 +1,72 @@ +#N canvas 963 492 707 429 10; +#X obj 126 162 codepend~; +#X obj 126 199 *~ 0.05; +#X obj 126 230 dac~; +#X obj 225 163 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 6600 1; +#X floatatom 222 183 5 0 0 0 - - -, f 5; +#X text 15 258 codepend~ is a classic "block convolution" processor. +It performs a complex multiply upon the spectra of two input signals. +Multiplication of spectra can cause significant drops in the amplitude +of the output signal. The invert message causes codepend~ to perform +complex division of the input spectra rather than multiplication. Be +careful! This can cause huge amplitude gains. A "pad" message is provided +to allow for empirical amplitude balancing between the normal and "invert" +states. Experiment at low volume levels while getting a feel for this +external.; +#X floatatom 320 18 5 0 0 0 - codepend-scalingexp -, f 5; +#X floatatom 381 92 5 0 0 0 - - -, f 5; +#X obj 381 70 expr pow(10. \, $f1 * 0.05); +#X floatatom 381 48 5 -120 0 1 inverse-threshold - -, f 5; +#X text 360 17 scaling exponent (lower values increase distortion) +; +#X obj 50 91 readsf~; +#X msg 17 61 1; +#X obj 50 35 openpanel; +#X msg 50 60 open \$1; +#X msg 50 8 bang; +#X obj 160 85 readsf~; +#X obj 160 29 openpanel; +#X msg 160 54 open \$1; +#X msg 160 2 bang; +#N canvas 516 425 450 300 init 0; +#X msg 124 172 \; codepend-scalingexp 0.2 \; codepend-invertscale -36 +; +#X restore 413 380 pd init; +#X obj 14 127 r fftz.codepend.msgs; +#X obj 413 345 s fftz.codepend.msgs; +#X msg 413 309 invert \$1; +#X obj 413 273 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 534 307 pad \$1; +#X floatatom 534 284 5 0 0 0 - - -, f 5; +#X obj 534 262 expr pow(10. \, $f1 * 0.05); +#X floatatom 534 235 5 0 0 0 - codepend-invertscale -, f 5; +#X text 84 6 load sf1; +#X text 196 6 load sf2; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 6 0 0 2; +#X connect 7 0 0 3; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 11 0 0 0; +#X connect 12 0 11 0; +#X connect 12 0 16 0; +#X connect 13 0 14 0; +#X connect 14 0 11 0; +#X connect 15 0 13 0; +#X connect 16 0 0 1; +#X connect 17 0 18 0; +#X connect 18 0 16 0; +#X connect 19 0 17 0; +#X connect 21 0 0 0; +#X connect 23 0 22 0; +#X connect 24 0 23 0; +#X connect 25 0 22 0; +#X connect 26 0 25 0; +#X connect 27 0 26 0; +#X connect 28 0 27 0; diff --git a/externals/fftease/fftease32-helpfiles/cross~-help.pd b/externals/fftease/fftease32-helpfiles/cross~-help.pd new file mode 100644 index 000000000..a1c48989b --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/cross~-help.pd @@ -0,0 +1,124 @@ +#N canvas 823 457 553 431 10; +#X obj -268 175 cross~; +#X obj -238 107 readsf~; +#X obj -238 51 openpanel; +#X msg -238 76 open \$1; +#X msg -238 24 bang; +#X text -202 28 load sf2; +#X obj -354 118 readsf~; +#X obj -353 43 openpanel; +#X msg -353 68 open \$1; +#X msg -353 16 bang; +#X text -317 20 load sf1; +#X obj -268 295 *~ 0.05; +#X obj -268 326 dac~; +#X obj -226 250 hsl 128 15 0 20 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 9500 1; +#X floatatom -229 275 5 0 0 0 - - -, f 5; +#X floatatom -143 136 5 0 0 0 - - -, f 5; +#X msg -287 80 1; +#X msg -143 91 1e-06; +#X obj 3 298 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 2 256 pd meter; +#X obj 71 300 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 70 257 pd meter; +#X msg -78 92 0.25; +#X msg -36 93 0.05; +#X obj -268 231 *~; +#X floatatom -208 208 5 0 0 0 - cross-pad -, f 5; +#N canvas 1452 650 450 300 autonorm 0; +#X obj 57 24 inlet; +#X obj 57 59 t f f; +#X obj 44 124 sel 0 1; +#X msg 20 192 1; +#X msg 100 175 0.025; +#X obj 45 223 s cross-pad; +#X msg 148 118 autonorm \$1; +#X obj 149 149 s fftz-cross-msgs; +#X obj 18 160 pipe 50; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 6 0; +#X connect 2 0 8 0; +#X connect 2 1 4 0; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X connect 6 0 7 0; +#X connect 8 0 3 0; +#X restore -16 192 pd autonorm; +#X obj -375 195 r fftz-cross-msgs; +#X obj -16 170 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X text -365 349 cross~ uses a threshold to determine whether to perform +spectral multiplication or maintain the last calculated magnitude/phase +pair. An autonorm option attempts to keep overall frame amplitudes +consistent.; +#X connect 0 0 24 0; +#X connect 1 0 0 1; +#X connect 1 0 21 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 6 0 0 0; +#X connect 6 0 19 0; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 11 0 12 0; +#X connect 11 0 12 1; +#X connect 13 0 14 0; +#X connect 14 0 11 1; +#X connect 15 0 0 2; +#X connect 16 0 6 0; +#X connect 16 0 1 0; +#X connect 17 0 15 0; +#X connect 19 0 18 0; +#X connect 21 0 20 0; +#X connect 22 0 15 0; +#X connect 23 0 15 0; +#X connect 24 0 11 0; +#X connect 25 0 24 1; +#X connect 27 0 0 0; +#X connect 28 0 26 0; diff --git a/externals/fftease/fftease32-helpfiles/dentist~-help.pd b/externals/fftease/fftease32-helpfiles/dentist~-help.pd new file mode 100644 index 000000000..f23b5c72b --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/dentist~-help.pd @@ -0,0 +1,77 @@ +#N canvas 692 324 623 380 10; +#X obj 197 240 *~ 0.05; +#X obj 197 271 dac~; +#X obj 239 200 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 4700 1; +#X floatatom 236 220 5 0 0 0 - - -, f 5; +#X obj 197 105 dentist~ 2048 8; +#X obj 197 37 r fftz-dentist-msgs; +#X obj 114 28 noise~; +#N canvas 404 737 450 300 showsync 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 240 135 pd showsync; +#X msg 57 173 scramble; +#X obj 57 143 metro 7000; +#X obj 57 109 tgl 15 0 empty dentist-scrambletog empty 17 7 0 10 -262144 +-1 -1 1 1; +#N canvas 1413 688 450 300 interpolation-and-control 0; +#X msg 57 100 ramptime \$1; +#X floatatom 57 65 5 0 0 0 - dentist-ramptime -, f 5; +#X obj 54 212 s fftz-dentist-msgs; +#X msg 192 107 topfreq \$1; +#X floatatom 189 71 5 0 0 0 - dentist-topfreq -, f 5; +#X msg 281 168 toothcount \$1; +#X floatatom 303 126 5 0 0 0 - dentist-toothcount -, f 5; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 6 0 5 0; +#X restore 427 126 pd interpolation-and-control; +#N canvas 497 416 384 290 init 0; +#X msg 118 125 \; dentist-ramptime 7000 \; dentist-topfreq 3000 \; +dentist-toothcount 18 \; dentist-scrambletog 1 \;; +#X obj 118 96 loadbang; +#X connect 1 0 0 0; +#X restore 429 180 pd init; +#X floatatom 240 162 5 0 0 0 - - -, f 5; +#N canvas 1224 626 533 316 data-storage 0; +#X obj 54 212 s fftz-dentist-msgs; +#X msg 123 107 setstate 15 7 9 92; +#X msg 116 144 setstate 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 +19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40; +#X msg 51 40 setstate 10 11 12 13 14 50 51 52 53 43; +#X msg 94 73 setstate 7 15 40; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X restore 428 155 pd data-storage; +#X text 60 304 dentist~ punches out all but a select set of partials. +; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 2 0 3 0; +#X connect 3 0 0 1; +#X connect 4 0 0 0; +#X connect 4 1 7 0; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 13 0; +#X connect 8 0 4 0; +#X connect 9 0 8 0; +#X connect 10 0 9 0; diff --git a/externals/fftease/fftease32-helpfiles/disarrain~-help.pd b/externals/fftease/fftease32-helpfiles/disarrain~-help.pd new file mode 100644 index 000000000..d00190816 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/disarrain~-help.pd @@ -0,0 +1,86 @@ +#N canvas 889 356 642 531 10; +#X obj 142 209 disarrain~; +#X obj 98 101 phasor~ 261; +#X obj 98 129 -~ 0.5; +#X msg 198 131 fadetime \$1; +#X floatatom 198 109 5 0 0 0 - disarrain-fadetime -, f 5; +#X floatatom 296 126 5 0 0 0 - disarrain-switchct -, f 5; +#X obj 98 335 *~ 0.05; +#X obj 98 366 dac~; +#X obj 140 295 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 3900 1; +#X floatatom 137 315 5 0 0 0 - - -, f 5; +#N canvas 404 737 450 300 showsync 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 183 247 pd showsync; +#X floatatom 183 273 5 0 0 0 - - -, f 5; +#X msg 296 151 switch_count \$1; +#X obj 36 180 metro 3000; +#X obj 37 27 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#N canvas 309 378 450 300 init 0; +#X obj -52 38 loadbang; +#X msg -52 65 \; disarrain-fadetime 3000 \; disarrain-switchct 70 \; +disarrain-topfreq 2000; +#X connect 0 0 1 0; +#X restore 286 293 pd init; +#X text 22 388 fftz.disarrain~ reorders a certain number of bins \, +which can significantly transform the timbre. The spectral reordering +is reported from the third outlet.; +#X msg 332 177 showstate; +#N canvas 0 22 450 300 showbins 0; +#X obj 103 48 inlet; +#X msg 42 210 62 70 5 20 43 30 48 49 60 44 32 11 8 46 35 6 65 38 34 +33 14 21 22 61 53 25 45 57 16 10 3 37 52 17 18 55 36 66 2 26 68 4 69 +0 42 47 31 39 54 27 40 50 13 63 58 24 56 59 67 7 19 23 1 9 64 41 29 +51 15 28; +#X msg 42 109 set \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 +\$13 \$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21 \$22 \$23 \$24 \$25 \$26 +\$27 \$28 \$29 \$30 \$31 \$32 \$33 \$34 \$35 \$36 \$37 \$38 \$39 \$40 +\$41 \$42 \$43 \$44 \$45 \$46 \$47 \$48 \$49 \$50 \$51 \$52 \$53 \$54 +\$55 \$56 \$57 \$58 \$59 \$60 \$61 \$62 \$63 \$64 \$65 \$66 \$67 \$68 +\$69 \$70; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X restore 271 245 pd showbins; +#X text 59 26 turn on for interpolation; +#X obj 37 56 t f b b; +#X obj 223 50 s disarrain-switchct; +#X obj 223 70 s disarrain-fadetime; +#X floatatom 469 181 5 0 0 0 - disarrain-topfreq -, f 5; +#X msg 469 209 topfreq \$1; +#X connect 0 0 6 0; +#X connect 0 1 10 0; +#X connect 0 2 18 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 12 0; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 8 0 9 0; +#X connect 9 0 6 1; +#X connect 10 0 11 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 20 0; +#X connect 17 0 0 0; +#X connect 20 0 13 0; +#X connect 20 1 22 0; +#X connect 20 2 21 0; +#X connect 23 0 24 0; +#X connect 24 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/disarray~-help.pd b/externals/fftease/fftease32-helpfiles/disarray~-help.pd new file mode 100644 index 000000000..605d358f3 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/disarray~-help.pd @@ -0,0 +1,50 @@ +#N canvas 867 556 734 372 10; +#X obj 112 160 disarray~; +#X obj 97 50 phasor~ 261; +#X obj 97 77 -~ 0.5; +#X obj 112 249 *~ 0.05; +#X obj 112 280 dac~; +#X obj 154 209 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 3500 1; +#X floatatom 151 229 5 0 0 0 - - -, f 5; +#X msg 191 51 switch_count \$1; +#X floatatom 191 18 5 0 0 0 - disarray-swcnt -, f 5; +#X msg 389 178 topfreq \$1; +#X floatatom 389 149 5 0 0 0 - disarray-topf -, f 5; +#X msg 18 131 bang; +#X msg 347 219 set \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 +\$13 \$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21 \$22 \$23 \$24 \$25 \$26 +\$27 \$28 \$29 \$30; +#X msg 347 269 68 23 20 16 53 18 14 32 5 58 50 8 33 28 3 29 52 62 70 +35 13 48 42 69 26 12 37 39 17 0; +#X msg 298 52 showstate; +#X msg 310 76 setstate 68 23 20 16 53 18 14 32 5 58 50 8 33 28 3 29 +52 62 70 35 13 48 42 69 26 12 37 39 17 0; +#X msg 309 113 setstate 40 108 102 115 104 49 10 21 89 45 84 22 4 28 +92 83 68 14 46 65 110 63 25 116 24 117 30 32 31 72; +#X text 14 112 new scramble; +#N canvas 398 725 450 300 init 0; +#X msg 130 129 \; disarray-swcnt 30 \; disarray-topf 3000 \;; +#X obj 167 74 loadbang; +#X connect 1 0 0 0; +#X restore 479 37 pd init; +#X text 23 312 disarray~ reorders a certain number of bins \, which +can significantly transform the timbre. The spectral reordering is +reported from the second outlet.; +#X connect 0 0 3 0; +#X connect 0 1 12 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 5 0 6 0; +#X connect 6 0 3 1; +#X connect 7 0 0 0; +#X connect 8 0 7 0; +#X connect 9 0 0 0; +#X connect 10 0 9 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/drown~-help.pd b/externals/fftease/fftease32-helpfiles/drown~-help.pd new file mode 100644 index 000000000..4fdbbc98e --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/drown~-help.pd @@ -0,0 +1,51 @@ +#N canvas 812 597 450 300 10; +#X obj 142 111 drown~; +#X obj 142 189 *~ 0.05; +#X obj 142 220 dac~; +#X obj 184 149 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 181 169 5 0 0 0 - - -, f 5; +#X obj 60 58 osc~ 440; +#X floatatom 175 88 5 0 0 0 - - -, f 5; +#X obj 178 64 hsl 128 15 0 1 0 0 empty empty noise-reduction-factor +-2 -8 0 10 -262144 -1 -1 11000 1; +#X floatatom 131 51 5 0 0 0 - - -, f 5; +#X obj 134 27 hsl 128 15 0 1 0 0 empty empty noise-threshold -2 -8 +0 10 -262144 -1 -1 0 1; +#N canvas 1336 367 450 300 add-noise 0; +#X obj 89 109 noise~; +#X obj 135 169 *~; +#X obj 190 77 inlet; +#X obj 130 227 outlet~; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 1 1; +#X restore 50 143 pd add-noise; +#X obj 50 117 tgl 15 0 empty drown-noisetog empty 17 7 0 10 -262144 +-1 -1 1 1; +#X msg -19 57 adaptive \$1; +#X obj -19 27 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text -16 242 drown~ reduces the energy of low energy bins for noise +reduction. Or you could use a factor > 1 to increase the noise in the +signal. In adaptive mode \, the threshold is determined relative to +each FFT frame peak.; +#N canvas 285 462 450 300 init 0; +#X msg 141 120 \; drown-noisetog 1 \;; +#X obj 142 84 loadbang; +#X connect 1 0 0 0; +#X restore 260 207 pd init; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 5 0 0 0; +#X connect 6 0 0 2; +#X connect 7 0 6 0; +#X connect 8 0 0 1; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 11 0 10 0; +#X connect 12 0 0 0; +#X connect 13 0 12 0; diff --git a/externals/fftease/fftease32-helpfiles/enrich~-help.pd b/externals/fftease/fftease32-helpfiles/enrich~-help.pd new file mode 100644 index 000000000..7dfec304a --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/enrich~-help.pd @@ -0,0 +1,68 @@ +#N canvas 851 431 869 609 10; +#N canvas 0 22 450 278 (subpatch) 0; +#X array enrich-buffer 8195 float 2; +#X coords 0 1 8195 -1 200 140 1 0 0; +#X restore 361 27 graph; +#X msg 252 355 \; enrich-buffer cosinesum 8192 0 1; +#X obj 41 121 readsf~; +#X obj 41 65 openpanel; +#X msg 41 90 open \$1; +#X msg 41 38 bang; +#X msg 114 92 1; +#X obj 41 259 enrich~ enrich-buffer; +#X obj 41 371 *~ 0.05; +#X obj 41 402 dac~; +#X obj 83 331 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 80 351 5 0 0 0 - - -, f 5; +#X obj 149 210 sig~ 1; +#X obj 220 208 sig~ 0.001; +#X msg 250 397 \; enrich-buffer cosinesum 8192 0 0.333 0.333 0.33; +#X text 460 354 normal resynthesis with a cosine; +#X text 548 404 add more harmonics; +#X msg 250 441 \; enrich-buffer cosinesum 8192 0 0 0 0 0.2 0.4 0 0 +0.4; +#X obj 252 328 loadbang; +#X text 566 27 try drawing directly into the array; +#X text 565 45 for lots of harmonics; +#X text 81 43 load a sound file; +#X text 143 91 play it; +#X obj 152 148 hsl 128 15 0.5 1.9999 0 0 empty enrich-tfac transpose-factor +-2 -8 0 10 -262144 -1 -1 4234 1; +#X floatatom 149 181 9 0 0 0 - - -, f 9; +#X msg 371 226 highfreq \$1; +#X floatatom 371 200 5 0 0 0 - enrich-hfr -, f 5; +#N canvas 365 262 450 300 init 0; +#X msg 87 143 \; enrich-hfr 10000 \; enrich-tfac 1 \; enrich-lofr 0 +; +#X obj 101 105 loadbang; +#X connect 1 0 0 0; +#X restore 499 313 pd init; +#X floatatom 461 198 5 0 0 0 - enrich-lofr -, f 5; +#X msg 461 224 lowfreq \$1; +#X obj 9 190 r fftz-enrich-msgs; +#X obj 371 268 s fftz-enrich-msgs; +#X text 46 501 enrich~ synthesizes an oscillator bank that reads from +a Pd array \, which can contain any user-specified waveform. Useful +for distortion.; +#X text 575 450 way high harmonics; +#X connect 2 0 7 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 2 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 0 9 1; +#X connect 10 0 11 0; +#X connect 11 0 8 1; +#X connect 12 0 7 1; +#X connect 13 0 7 2; +#X connect 18 0 1 0; +#X connect 23 0 24 0; +#X connect 24 0 12 0; +#X connect 25 0 31 0; +#X connect 26 0 25 0; +#X connect 28 0 29 0; +#X connect 29 0 31 0; +#X connect 30 0 7 0; diff --git a/externals/fftease/fftease32-helpfiles/ether~-help.pd b/externals/fftease/fftease32-helpfiles/ether~-help.pd new file mode 100644 index 000000000..5fa5a27f7 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/ether~-help.pd @@ -0,0 +1,51 @@ +#N canvas 945 525 525 499 10; +#X obj 143 202 ether~; +#X obj 143 137 readsf~; +#X obj 143 81 openpanel; +#X msg 143 106 open \$1; +#X msg 143 54 bang; +#X msg 211 106 1; +#X obj 278 140 readsf~; +#X obj 278 84 openpanel; +#X msg 278 109 open \$1; +#X msg 278 57 bang; +#X text 314 61 load sf2; +#X floatatom 292 178 5 0 512 0 - - -, f 5; +#X obj 160 283 *~ 0.05; +#X obj 160 314 dac~; +#X obj 202 243 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 2600 1; +#X floatatom 199 263 5 0 0 0 - - -, f 5; +#X msg 36 163 invert \$1; +#X obj 36 129 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 13 337 ether~ selects portions of two input signals and creates +a composite output spectrum based upon the amplitude of the inputs. +In a bin-by-bin comparison \, the strongest bin of the two inputs will +be selected. Sending the inverse message will reverse this behavior +\, selecting the weakest bins. The composite index is a scalar for +the selection of the second input. Higher values for the composite +index will favor the second input. Useful values will vary according +to the amplitude characteristics of the input signals. Try values greater +than 0 and less than 100 But higher values may be effective depending +upon the input signals.; +#X text 331 176 composite index; +#X text 179 58 load sf1; +#X connect 0 0 12 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 0 1; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 11 0 0 2; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; +#X connect 16 0 0 0; +#X connect 17 0 16 0; diff --git a/externals/fftease/fftease32-helpfiles/leaker~-help.pd b/externals/fftease/fftease32-helpfiles/leaker~-help.pd new file mode 100644 index 000000000..cb093e289 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/leaker~-help.pd @@ -0,0 +1,50 @@ +#N canvas 802 314 518 484 10; +#X obj 197 210 leaker~; +#X obj 155 149 readsf~; +#X obj 155 93 openpanel; +#X msg 155 118 open \$1; +#X msg 155 66 bang; +#X msg 223 118 1; +#X obj 274 153 readsf~; +#X obj 274 97 openpanel; +#X msg 274 122 open \$1; +#X msg 274 70 bang; +#X text 310 74 load sf2; +#X text 191 70 load sf1; +#X floatatom 298 188 5 0 0 0 - - -, f 5; +#X obj 358 162 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 12700 1; +#X obj 197 301 *~ 0.05; +#X obj 197 332 dac~; +#X obj 239 261 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 10700 1; +#X floatatom 236 281 5 0 0 0 - - -, f 5; +#X msg 22 96 upsieve; +#X msg 23 122 downsieve; +#X msg 23 155 randsieve; +#X text 33 360 leaker~ combines two input sounds \, with the spectral +contribution of each sound determined by an internally maintained sieve +and a threshold selection value. At value 0 \, only sound 1 is heard +and at value 1 \, only sound 2 is heard. At intermediate values \, +parts of each spectrum are aggregated according to the sieve structure +which may be specified as upsieve \, downsieve or randsieve.; +#X connect 0 0 14 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 0 1; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 12 0 0 2; +#X connect 13 0 12 0; +#X connect 14 0 15 0; +#X connect 14 0 15 1; +#X connect 16 0 17 0; +#X connect 17 0 14 1; +#X connect 18 0 0 0; +#X connect 19 0 0 0; +#X connect 20 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/mindwarp~-help.pd b/externals/fftease/fftease32-helpfiles/mindwarp~-help.pd new file mode 100644 index 000000000..087deab23 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/mindwarp~-help.pd @@ -0,0 +1,93 @@ +#N canvas 750 306 571 646 10; +#X obj 208 215 mindwarp~; +#X obj 146 168 pvoc~; +#N canvas 402 529 480 401 selector 0; +#X obj 127 50 inlet~; +#X obj 202 52 inlet~; +#X obj 48 53 inlet; +#X obj 155 350 outlet~; +#X obj 154 278 *~; +#X obj 214 274 *~; +#X obj 48 105 sel 0 1; +#X msg 48 139 1 0; +#X msg 94 139 0 1; +#X floatatom 170 225 5 0 0 0 - - -, f 5; +#X floatatom 246 223 5 0 0 0 - - -, f 5; +#X obj 48 173 unpack f f; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 4 0 3 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 1 8 0; +#X connect 7 0 11 0; +#X connect 8 0 11 0; +#X connect 9 0 4 1; +#X connect 10 0 5 1; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X restore 173 281 pd selector; +#X obj 141 230 tgl 15 0 empty mindwarp-tog empty 17 7 0 10 -262144 +-1 -1 1 1; +#X obj 173 364 *~ 0.05; +#X obj 173 395 dac~; +#X obj 215 324 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 4900 1; +#X floatatom 212 344 5 0 0 0 - - -, f 5; +#X obj 146 134 readsf~; +#X obj 146 78 openpanel; +#X msg 146 103 open \$1; +#X msg 146 51 bang; +#X msg 214 103 1; +#X text 182 55 load sf; +#X text 247 103 play it; +#X floatatom 229 136 5 0 0 0 - mindwarp-tfac -, f 5; +#X floatatom 305 168 5 0 0 0 - mindwarp-wfac -, f 5; +#X obj 235 157 sig~ 0.001; +#X floatatom 343 194 5 0 0 0 - mindwarp-shapew -, f 5; +#X text 50 221 0 - raw pvoc; +#X text 49 237 1 - mindwarp; +#N canvas 0 22 450 300 init 0; +#X obj 36 100 loadbang; +#X msg 36 135 \; mindwarp-tfac 1 \; mindwarp-wfac 1 \; mindwarp-shapew +10 \; mindwarp-tog 1 \; mindwarp-tfac&warpfac 1; +#X connect 0 0 1 0; +#X restore 422 262 pd init; +#X obj 353 117 hsl 128 15 0.5 2 0 0 empty mindwarp-tfac&warpfac tfac&warpfac +-2 -8 0 10 -262144 -1 -1 533 1; +#X obj 350 137 s mindwarp-tfac; +#X obj 383 162 s mindwarp-wfac; +#X text 27 423 mindwarp~ performs spectral envelope warping. It can +be used to correct for the formant shifting effects of pitch-scaling. +The warp factor is tuned to warp spectra to compensate for directly +corresponding pitch-scaling values. For example \, if you have pitch-scaled +a signal by a factor of two \, increasing its frequency content by +an octave \, by providing mindwarp~ with a warp factor of 2 and the +pitch-scaled signal \, mindwarp~ will restore the spectral formant +of the signal to an estimation of the shape present in the original +unscaled signal. Currently \, warp factor values are restricted to +the range [1/16 ... 16.]. mindwarp~ utilizes frequency shaping to perform +its duty. You may need to fiddle with the shape width to best catch +the formants. It can be fun to decorrelate the warp factor from the +transposition factor.; +#X connect 0 0 2 2; +#X connect 1 0 0 0; +#X connect 1 0 2 1; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 6 0 7 0; +#X connect 7 0 4 1; +#X connect 8 0 1 0; +#X connect 9 0 10 0; +#X connect 10 0 8 0; +#X connect 11 0 9 0; +#X connect 12 0 8 0; +#X connect 15 0 1 1; +#X connect 16 0 0 1; +#X connect 17 0 1 2; +#X connect 18 0 0 2; +#X connect 22 0 23 0; +#X connect 22 0 24 0; diff --git a/externals/fftease/fftease32-helpfiles/morphine~-help.pd b/externals/fftease/fftease32-helpfiles/morphine~-help.pd new file mode 100644 index 000000000..cbc3449bd --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/morphine~-help.pd @@ -0,0 +1,53 @@ +#N canvas 808 479 612 478 10; +#X obj 181 140 readsf~; +#X obj 181 84 openpanel; +#X msg 181 109 open \$1; +#X msg 181 57 bang; +#X msg 249 109 1; +#X obj 312 139 readsf~; +#X obj 312 83 openpanel; +#X msg 312 108 open \$1; +#X msg 312 56 bang; +#X text 348 60 load sf2; +#X text 217 61 load sf1; +#X msg 60 135 transition \$1; +#X floatatom 60 104 5 0 0 0 - morphine-trans -, f 5; +#X obj 193 265 *~ 0.05; +#X obj 193 296 dac~; +#X obj 235 225 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 11800 1; +#X floatatom 232 245 5 0 0 0 - - -, f 5; +#X obj 191 187 morphine~ 4096 8; +#X text 19 318 morphine~ performs spectral morphing \, creating a new +spectrum from its two inputs. Values between 0 and 1 are the useful +range for the morph index. The progression depends upon the exponential +transition scaling value. Progressively smaller negative values will +widen the transition space between the two sounds. Larger FFT sizes +\, such as 4096 \, produce smoother results.; +#X obj 407 169 hsl 128 15 0 1 0 0 empty empty morph-index -2 -8 0 10 +-262144 -1 -1 5500 1; +#X floatatom 404 195 5 0 0 0 - - -, f 5; +#N canvas 0 22 450 300 init 0; +#X msg 151 157 \; morphine-trans -5; +#X obj 151 125 loadbang; +#X connect 1 0 0 0; +#X restore 441 258 pd init; +#X connect 0 0 17 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 17 1; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 11 0 17 0; +#X connect 12 0 11 0; +#X connect 13 0 14 0; +#X connect 13 0 14 1; +#X connect 15 0 16 0; +#X connect 16 0 13 1; +#X connect 17 0 13 0; +#X connect 19 0 20 0; +#X connect 20 0 17 2; diff --git a/externals/fftease/fftease32-helpfiles/multyq~-help.pd b/externals/fftease/fftease32-helpfiles/multyq~-help.pd new file mode 100644 index 000000000..37805a30f --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/multyq~-help.pd @@ -0,0 +1,60 @@ +#N canvas 1099 521 568 422 10; +#X obj 52 50 noise~; +#X obj 52 261 *~ 0.05; +#X obj 52 292 dac~; +#X obj 94 221 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 91 241 5 0 0 0 - - -, f 5; +#X floatatom 69 100 5 0 0 0 - multyq-f1 -, f 5; +#X floatatom 105 100 5 0 0 0 - multyq-bw1 -, f 5; +#X floatatom 141 99 5 0 0 0 - multyq-g1 -, f 5; +#N canvas 609 675 450 300 init 0; +#X msg 33 95 \; multyq-f1 565 \; multyq-bw1 0.5 \; multyq-g1 4 \; multyq-bw2 +0.45 \; multyq-bw3 0.2 \; multyq-g3 12 \;; +#X obj 33 64 loadbang; +#X connect 1 0 0 0; +#X restore 437 184 pd init; +#X obj 193 106 *~; +#X obj 193 41 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 282 30 osc~ 0.2; +#X obj 282 52 *~ 1000; +#X obj 282 74 +~ 1300; +#X obj 52 156 multyq~ 1024 8, f 71; +#X obj 263 107 * 4; +#X floatatom 228 126 5 0 0 0 - multyq-bw2 -, f 5; +#X text 124 41 autosweep; +#X floatatom 445 85 5 0 0 0 - multyq-bw3 -, f 5; +#X floatatom 487 85 5 0 0 0 - multyq-g3 -, f 5; +#X obj 407 45 hsl 128 15 1000 10000 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 0 1; +#X floatatom 404 86 5 0 0 0 - - -, f 5; +#X text 397 21 sweep high end; +#X text 289 137 room for one more; +#X text 52 319 multyq~ is a four band equalizer. Gain values below +0 create notches rather than peaks \, but only go as far as -1.0. Bandwidth +is from 0 to 1 Only three bands are used in this example \, but CPU +usage is the same regardless of how many are used. As the filter is +FFT-based \, its performance is spotty in the low frequency range. +; +#X connect 0 0 14 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 5 0 14 1; +#X connect 6 0 14 2; +#X connect 7 0 14 3; +#X connect 9 0 14 4; +#X connect 10 0 9 0; +#X connect 10 0 15 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 13 0 9 1; +#X connect 14 0 1 0; +#X connect 15 0 14 6; +#X connect 16 0 14 5; +#X connect 18 0 14 11; +#X connect 19 0 14 12; +#X connect 20 0 21 0; +#X connect 21 0 14 10; diff --git a/externals/fftease/fftease32-helpfiles/pileup~-help.pd b/externals/fftease/fftease32-helpfiles/pileup~-help.pd new file mode 100644 index 000000000..98a568366 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pileup~-help.pd @@ -0,0 +1,69 @@ +#N canvas 1256 420 532 415 10; +#X obj 112 222 pileup~; +#X msg 39 167 mode \$1; +#X obj 111 188 readsf~; +#X obj 111 132 openpanel; +#X msg 111 157 open \$1; +#X msg 111 105 bang; +#X msg 179 157 1; +#X text 147 109 load sf; +#X obj 112 299 *~ 0.05; +#X obj 112 330 dac~; +#X obj 154 259 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 151 279 5 0 0 0 - - -, f 5; +#X obj 218 186 r fftz-pileup-msgs; +#N canvas 1208 223 683 377 controls 0; +#X obj 96 277 s fftz-pileup-msgs; +#X msg 100 149 persistence \$1; +#X floatatom 100 110 5 0 0 0 - pileup-pers -, f 5; +#X msg 209 148 oscbank \$1, f 11; +#X obj 209 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 303 148 synthresh \$1; +#X floatatom 303 118 5 0 0 0 - - -, f 5; +#X obj 300 72 hsl 128 15 0 0.2 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 454 120 5 0 0 0 - - -, f 5; +#X obj 451 74 hsl 128 15 0.5 1.999 0 0 empty pileup-transp empty -2 +-8 0 10 -262144 -1 -1 4236 1; +#X msg 454 150 transpose \$1; +#X msg 349 240 clear; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 8 0 10 0; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X restore 254 133 pd controls; +#N canvas 568 719 450 300 init 0; +#X msg 97 151 \; pileup-transp 1 \; pileup-pers 0.99; +#X obj 97 107 loadbang; +#X connect 1 0 0 0; +#X restore 250 88 pd init; +#X obj 38 16 vradio 20 1 0 3 empty empty empty 0 -8 0 10 -262144 -1 +-1 0; +#X text 65 17 persistent amplitude and phase; +#X text 66 36 persistent amplitude only; +#X text 66 58 inverse persistence; +#X text 52 353 pileup~ maintains amplitude/phase information in bins +(with possible damping) until new information comes in above a given +threshold. This is useful for various reverberant effects.; +#X connect 0 0 8 0; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 2 0; +#X connect 8 0 9 0; +#X connect 8 0 9 1; +#X connect 10 0 11 0; +#X connect 11 0 8 1; +#X connect 12 0 0 0; +#X connect 15 0 1 0; diff --git a/externals/fftease/fftease32-helpfiles/pvcompand~-help.pd b/externals/fftease/fftease32-helpfiles/pvcompand~-help.pd new file mode 100644 index 000000000..94f249ef5 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvcompand~-help.pd @@ -0,0 +1,31 @@ +#N canvas 1205 620 541 378 10; +#X obj 43 149 pvcompand~; +#X obj 43 109 readsf~; +#X obj 43 53 openpanel; +#X msg 43 78 open \$1; +#X msg 43 26 bang; +#X msg 111 78 1; +#X text 79 30 load sf; +#X floatatom 192 96 5 0 0 0 - - -, f 5; +#X text 189 74 threshold factor; +#X obj 43 225 *~ 0.05; +#X obj 43 256 dac~; +#X obj 85 185 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 82 205 5 0 0 0 - - -, f 5; +#X text 41 274 pvcompand~ either expands or compresses the differences +between the amplitudes of the spectral frames. The threshold is interpreted +as dB and useful ranges are from about -60 to +60. Positive values +increase the "peakiness" of the sound and negative values tend to whiten +the spectrum.; +#X connect 0 0 9 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 7 0 0 1; +#X connect 9 0 10 0; +#X connect 9 0 10 1; +#X connect 11 0 12 0; +#X connect 12 0 9 1; diff --git a/externals/fftease/fftease32-helpfiles/pvgrain~-help.pd b/externals/fftease/fftease32-helpfiles/pvgrain~-help.pd new file mode 100644 index 000000000..79a439e35 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvgrain~-help.pd @@ -0,0 +1,440 @@ +#N canvas 986 280 572 436 10; +#X obj 144 173 pvgrain~; +#X obj 53 121 readsf~; +#X obj 53 65 openpanel; +#X msg 53 90 open \$1; +#X msg 53 38 bang; +#X msg 121 90 1; +#X text 89 42 load sf; +#X obj 53 213 *~; +#X floatatom 68 180 5 0 0 0 - mix-in-orig -, f 5; +#X obj 53 305 *~ 0.05; +#X obj 53 336 dac~; +#X obj 126 263 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 123 283 5 0 0 0 - - -, f 5; +#N canvas 0 22 450 278 (subpatch) 0; +#X array pvgrain-pf 46379 float 2; +#X coords 0 1 46379 -1 200 140 1; +#X restore 255 28 graph; +#X obj 275 273 soundfiler; +#X obj 275 207 loadbang; +#X obj 144 137 r pvgrain-msgs; +#N canvas 1172 705 632 335 control 0; +#X obj 143 143 s pvgrain-msgs; +#X msg 143 106 probability \$1; +#X floatatom 143 73 7 0 0 0 - - -, f 7; +#X obj 146 38 hsl 128 15 0.0001 0.1 0 0 empty pvgrain-prob empty -2 +-8 0 10 -262144 -1 -1 2530 1; +#X msg 276 106 framegrains \$1; +#X floatatom 276 73 5 1 60 0 - pvgrain-fgr -, f 5; +#X msg 437 110 topfreq \$1; +#X floatatom 437 75 7 50 20000 0 - pvgrain-topf -, f 7; +#X floatatom 355 190 5 0 0 0 - base-freq -, f 5; +#X obj 355 209 s base-frequency; +#X obj 121 206 hsl 128 15 0 1 0 0 mix-in-orig empty mix-in-orig -2 +-8 0 10 -262144 -1 -1 0 1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X restore 275 301 pd control; +#N canvas 857 534 450 300 init 0; +#X obj 39 78 loadbang; +#X msg 39 114 \; base-freq 261 \; pvgrain-topf 4000 \; pvgrain-fgr +20 \; pvgrain-prob 0.02; +#X connect 0 0 1 0; +#X restore 274 326 pd init; +#N canvas 610 230 689 382 playback 0; +#X obj 51 29 inlet; +#X obj 92 104 + 1; +#X obj 92 139 % 8; +#N canvas 1105 181 610 733 gate8 0; +#X obj 33 22 inlet; +#X obj 525 101 inlet; +#X obj 33 75 sel 0 1 2 3 4 5 6 7; +#X obj 14 508 spigot; +#X obj 14 530 outlet; +#X obj 64 508 spigot; +#X obj 64 530 outlet; +#X obj 115 510 spigot; +#X obj 115 532 outlet; +#X obj 165 510 spigot; +#X obj 165 532 outlet; +#X obj 216 508 spigot; +#X obj 216 530 outlet; +#X obj 266 508 spigot; +#X obj 266 530 outlet; +#X obj 317 510 spigot; +#X obj 317 532 outlet; +#X obj 367 510 spigot; +#X obj 367 532 outlet; +#X obj 11 461 unpack f f f f f f f f, f 59; +#X msg 34 115 1 0 0 0 0 0 0 0; +#X msg 43 139 0 1 0 0 0 0 0 0; +#X msg 57 161 0 0 1 0 0 0 0 0; +#X msg 70 187 0 0 0 1 0 0 0 0; +#X msg 90 221 0 0 0 0 1 0 0 0 0; +#X msg 100 250 0 0 0 0 0 1 0 0 0; +#X msg 117 279 0 0 0 0 0 0 1 0 0; +#X msg 129 309 0 0 0 0 0 0 0 1 0; +#X msg 142 337 0 0 0 0 0 0 0 0 1, f 79; +#X connect 0 0 2 0; +#X connect 1 0 3 0; +#X connect 1 0 5 0; +#X connect 1 0 7 0; +#X connect 1 0 9 0; +#X connect 1 0 11 0; +#X connect 1 0 13 0; +#X connect 1 0 15 0; +#X connect 1 0 17 0; +#X connect 2 0 20 0; +#X connect 2 1 21 0; +#X connect 2 2 22 0; +#X connect 2 3 23 0; +#X connect 2 4 24 0; +#X connect 2 5 25 0; +#X connect 2 6 26 0; +#X connect 2 7 27 0; +#X connect 2 8 28 0; +#X connect 3 0 4 0; +#X connect 5 0 6 0; +#X connect 7 0 8 0; +#X connect 9 0 10 0; +#X connect 11 0 12 0; +#X connect 13 0 14 0; +#X connect 15 0 16 0; +#X connect 17 0 18 0; +#X connect 19 0 3 1; +#X connect 19 1 5 1; +#X connect 19 2 7 1; +#X connect 19 3 9 1; +#X connect 19 4 11 1; +#X connect 19 5 13 1; +#X connect 19 6 15 1; +#X connect 19 7 17 1; +#X connect 20 0 19 0; +#X connect 21 0 19 0; +#X connect 22 0 19 0; +#X connect 23 0 19 0; +#X connect 24 0 19 0; +#X connect 25 0 19 0; +#X connect 26 0 19 0; +#X connect 27 0 19 0; +#X connect 28 0 19 0; +#X restore 92 165 pd gate8; +#X obj 51 60 t l b; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 92 211 pd playlet; +#X obj 92 263 outlet~; +#X obj 51 105 f 0; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 163 211 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 238 210 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 309 210 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 383 209 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 454 209 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 529 208 pd playlet; +#N canvas 775 197 588 642 playlet 0; +#X obj 200 43 inlet; +#X obj 200 95 unpack f f; +#X obj 257 130 / 261; +#X obj 65 407 line~; +#X obj 65 444 tabread4~ pvgrain-pf; +#X obj 65 499 *~ 0.1; +#X floatatom 257 164 5 0 0 0 - - -, f 5; +#X msg 20 375 1; +#X msg 65 279 1051; +#X obj 65 317 /; +#X obj 257 200 t b f; +#X obj 65 342 t f b; +#X text 15 29 assumes 44100 SR; +#X obj 65 545 outlet~; +#X msg 65 374 46376 \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 1; +#X connect 1 1 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 7 0 3 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 8 0; +#X connect 10 1 9 1; +#X connect 11 0 14 0; +#X connect 11 1 7 0; +#X connect 14 0 3 0; +#X restore 600 208 pd playlet; +#X connect 0 0 4 0; +#X connect 1 0 2 0; +#X connect 1 0 7 1; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 8 0; +#X connect 3 2 9 0; +#X connect 3 3 10 0; +#X connect 3 4 11 0; +#X connect 3 5 12 0; +#X connect 3 6 13 0; +#X connect 3 7 14 0; +#X connect 4 0 3 1; +#X connect 4 1 7 0; +#X connect 5 0 6 0; +#X connect 7 0 1 0; +#X connect 8 0 6 0; +#X connect 9 0 6 0; +#X connect 10 0 6 0; +#X connect 11 0 6 0; +#X connect 12 0 6 0; +#X connect 13 0 6 0; +#X connect 14 0 6 0; +#X restore 126 220 pd playback; +#X text 49 379 pvgrain~ tracks an input sound and outputs control data +that can be used to play notes on a synthesizer or sampler.; +#X msg 275 243 read -resize sound/Piano.aif pvgrain-pf; +#X connect 0 0 19 0; +#X connect 1 0 0 0; +#X connect 1 0 7 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 7 0 9 0; +#X connect 8 0 7 1; +#X connect 9 0 10 0; +#X connect 9 0 10 1; +#X connect 11 0 12 0; +#X connect 12 0 9 1; +#X connect 15 0 21 0; +#X connect 16 0 0 0; +#X connect 19 0 9 0; +#X connect 21 0 14 0; diff --git a/externals/fftease/fftease32-helpfiles/pvharm~-help.pd b/externals/fftease/fftease32-helpfiles/pvharm~-help.pd new file mode 100644 index 000000000..3797d5570 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvharm~-help.pd @@ -0,0 +1,46 @@ +#N canvas 591 546 544 339 10; +#X obj 156 165 pvharm~; +#X obj 156 56 phasor~ 261; +#X obj 156 83 -~ 0.5; +#X floatatom 192 103 5 0 0 0 - pvharm-t1 -, f 5; +#X floatatom 236 102 5 0 0 0 - pvharm-t2 -, f 5; +#X obj 297 101 sig~ 0.001; +#X obj 156 241 *~ 0.05; +#X obj 156 272 dac~; +#X obj 198 201 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 300 1; +#X floatatom 195 221 5 0 0 0 - - -, f 5; +#N canvas 1322 528 450 300 init 0; +#X msg 104 131 \; pvharm-t1 1.5 \; pvharm-t2 1.25 \;; +#X obj 104 89 loadbang; +#X connect 1 0 0 0; +#X restore 381 140 pd init; +#X text 71 295 pvharm~ provides basic harmonizing with two transpositions +of the input internally calculated and mixed to the output; +#X obj 45 128 r pvharm-msgs; +#N canvas 1163 594 556 345 control 0; +#X obj 134 188 s pvharm-msgs; +#X msg 119 132 lowfreq \$1; +#X floatatom 115 79 5 0 0 0 - - -, f 5; +#X floatatom 224 78 5 0 0 0 - - -, f 5; +#X msg 228 131 highfreq \$1; +#X msg 354 140 osclimit \$1; +#X floatatom 370 90 5 0 0 0 - - -, f 5; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X restore 354 198 pd control; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 4 0 0 2; +#X connect 5 0 0 3; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 8 0 9 0; +#X connect 9 0 6 1; +#X connect 12 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/pvoc~-help.pd b/externals/fftease/fftease32-helpfiles/pvoc~-help.pd new file mode 100644 index 000000000..6f2b5f966 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvoc~-help.pd @@ -0,0 +1,44 @@ +#N canvas 935 286 642 545 10; +#X obj 236 346 *~ 0.05; +#X obj 295 132 sig~ 0.001; +#X obj 237 403 dac~; +#X floatatom 249 63 5 0 0 0 - - -, f 5; +#X obj 249 85 sig~ 1.5; +#X msg 105 233 mute \$1; +#X obj 105 203 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X floatatom 295 110 5 0 0 0 - - -, f 5; +#X msg 340 388 \; pd dsp \$1; +#X obj 340 357 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 252 39 hsl 128 15 0.2 2 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 1500 1; +#X obj 238 267 pvoc~ 2048; +#X obj 278 306 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 275 326 5 0 0 0 - - -, f 5; +#X obj 152 86 phasor~ 220; +#X obj 152 111 -~ 0.5; +#X msg 451 196 lowfreq \$1; +#X floatatom 451 165 5 0 0 0 - - -, f 5; +#X floatatom 529 170 5 0 0 0 - - -, f 5; +#X msg 529 201 highfreq \$1; +#X connect 0 0 2 0; +#X connect 0 0 2 1; +#X connect 1 0 11 2; +#X connect 3 0 4 0; +#X connect 4 0 11 1; +#X connect 5 0 11 0; +#X connect 6 0 5 0; +#X connect 7 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 3 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 13 0 0 1; +#X connect 14 0 15 0; +#X connect 15 0 11 0; +#X connect 16 0 11 0; +#X connect 17 0 16 0; +#X connect 18 0 19 0; +#X connect 19 0 11 0; diff --git a/externals/fftease/fftease32-helpfiles/pvtuner~-help.pd b/externals/fftease/fftease32-helpfiles/pvtuner~-help.pd new file mode 100644 index 000000000..95683637e --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvtuner~-help.pd @@ -0,0 +1,101 @@ +#N canvas 849 580 545 411 10; +#X obj 93 109 r pvtuner-msgs; +#N canvas 1344 734 450 300 control 0; +#X obj 103 205 s pvtuner-msgs; +#X msg 103 175 basefreq \$1; +#X floatatom 103 143 5 0 0 0 - - -, f 5; +#X msg 205 175 interpolation \$1; +#X obj 205 148 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 103 100 mtof; +#X floatatom 103 62 5 21 64 0 - pvtuner-scalestp -, f 5; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 6 0 5 0; +#X restore 364 189 pd control; +#X obj 150 150 sig~ 1; +#X obj 287 146 sig~ 0; +#X floatatom 287 120 5 0 1 0 - - -, f 5; +#X obj 290 95 hsl 128 15 0 1 0 0 empty pvtuner-interslide empty -2 +-8 0 10 -262144 -1 -1 0 1; +#X obj 56 58 noise~; +#X obj 100 271 *~ 0.05; +#X obj 100 302 dac~; +#X obj 142 231 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 1000 1; +#X floatatom 139 251 5 0 0 0 - - -, f 5; +#X obj 200 151 sig~ 0.01; +#N canvas 249 593 683 461 scales 0; +#X obj 49 418 s pvtuner-msgs; +#X msg 118 96 minor_seventh_chord; +#X msg 130 128 diatonic; +#X msg 62 54 eq12; +#N canvas 0 22 450 300 werkmeisterIII 0; +#X msg 134 125 32.625 36.4726 40.9036 43.4989 48.7835 54.5367 61.357 +65.25 72.9451 81.8072 86.9977 97.5671 109.073 122.714 130.5 145.89 +163.614 173.995 195.134 218.147 245.428 261 291.78 327.229 347.991 +390.268 436.294 490.856 522 583.561 654.458 695.982 780.537 872.588 +981.712 1044 1167.12 1308.92 1391.96 1561.07 1745.18 1963.42 2088 2334.24 +2617.83 2783.93 3122.15 3490.35 3926.85 4176 4668.49 5235.66 5567.86 +6244.29 6980.7 7853.7; +#X obj 146 55 inlet; +#X obj 69 246 outlet; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X restore 318 116 pd werkmeisterIII; +#X msg 320 80 bang; +#X msg 289 190 added_sixth_minor; +#X msg 294 222 added_sixth_major; +#X msg 101 65 major_seventh_chord; +#X msg 300 255 pelog; +#X msg 326 301 slendro; +#X msg 315 280 pentaclust; +#X msg 307 334 pentatonic; +#X msg 377 390 quarterclust; +#X msg 14 121 eq8; +#X msg 10 171 eq5; +#X msg 208 150 eqn 7; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 0 0; +#X restore 364 167 pd scales; +#N canvas 739 94 450 300 init 0; +#X obj 108 104 loadbang; +#X msg 108 135 \; pvtuner-scalestp 21 \; pvtuner-interslide 1; +#X connect 0 0 1 0; +#X restore 364 211 pd init; +#X text 44 342 pvtuner~ allows you to impose an arbitrary tuning scale +on any input sound. Several scales are built into the object \, and +you can provide arbitrary tunings with a sorted list of numbers representing +Hz values.; +#X text 188 57 Interpolate between scales \, when interpolation is +on; +#X obj 56 191 pvtuner~ 2048; +#X connect 0 0 16 0; +#X connect 2 0 16 1; +#X connect 3 0 16 3; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 16 0; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 9 0 10 0; +#X connect 10 0 7 1; +#X connect 11 0 16 2; +#X connect 16 0 7 0; diff --git a/externals/fftease/fftease32-helpfiles/pvwarpb~-help.pd b/externals/fftease/fftease32-helpfiles/pvwarpb~-help.pd new file mode 100644 index 000000000..04f9f85ab --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvwarpb~-help.pd @@ -0,0 +1,105 @@ +#N canvas 888 460 692 533 10; +#N canvas 495 165 450 278 (subpatch) 0; +#X array pvwarpb-array 512 float 3; +#A 0 0.203754 0.219606 0.235459 0.251311 0.267164 0.283017 0.298869 +0.314722 0.330575 0.346427 0.36228 0.378132 0.393985 0.409838 0.42569 +0.441543 0.457395 0.473248 0.489101 0.504953 0.520806 0.536658 0.552511 +0.568364 0.584216 0.600069 0.615921 0.631774 0.647627 0.663479 0.679332 +0.695185 0.711037 0.72689 0.742742 0.758595 0.774448 0.77349 0.772532 +0.771575 0.770617 0.769659 0.768702 0.767744 0.766786 0.765829 0.764871 +0.763914 0.762956 0.761998 0.761041 0.760083 0.759125 0.758168 0.75721 +0.756252 0.755295 0.754337 0.753379 0.752422 0.751464 0.750507 0.749549 +0.748591 0.747634 0.746676 0.745718 0.744761 0.743803 0.742845 0.741888 +0.74093 0.739973 0.739015 0.738057 0.7371 0.736142 0.735184 0.734227 +0.733269 0.732311 0.731354 0.730396 0.729438 0.728481 0.727523 0.726566 +0.728633 0.7307 0.732768 0.734835 0.736903 0.73897 0.741038 0.743105 +0.745172 0.74724 0.749307 0.751375 0.753442 0.755509 0.757577 0.759644 +0.761712 0.763779 0.765847 0.767914 0.769982 0.772049 0.774116 0.776184 +0.778251 0.780319 0.782386 0.784454 0.786521 0.788588 0.790656 0.792723 +0.794791 0.796858 0.798926 0.800993 0.80306 0.805128 0.807195 0.809263 +0.81133 0.813397 0.815465 0.817532 0.8196 0.821667 0.823735 0.825802 +0.827869 0.829937 0.832004 0.834072 0.836139 0.838207 0.840274 0.849787 +0.8593 0.868814 0.878327 0.88784 0.897354 0.906867 0.91638 0.925893 +0.935406 0.94492 0.954433 0.963946 0.973459 0.982973 0.992486 1.002 +1.01151 1.02103 1.03054 1.04005 1.04957 1.05908 1.06859 1.07811 1.08762 +1.09713 1.10664 1.11616 1.12567 1.13518 1.1447 1.15421 1.16372 1.17324 +1.18275 1.19226 1.20178 1.21129 1.2208 1.23032 1.23983 1.24934 1.25886 +1.26837 1.27788 1.2874 1.29691 1.30642 1.31594 1.31048 1.30503 1.29957 +1.29412 1.28866 1.28321 1.27775 1.2723 1.26685 1.26139 1.25594 1.25048 +1.24503 1.23957 1.23412 1.22866 1.22321 1.21775 1.2123 1.20685 1.20139 +1.19594 1.19048 1.18503 1.17957 1.17412 1.16866 1.16321 1.15775 1.1523 +1.14685 1.14139 1.13594 1.13048 1.12503 1.11957 1.11412 1.10866 1.10321 +1.09775 1.0923 1.08685 1.08139 1.07594 1.07048 1.06503 1.05957 1.05412 +1.04866 1.04321 1.03775 1.0323 1.02685 1.02139 1.01594 1.01048 1.00503 +0.999573 0.994118 0.988664 0.983209 0.977755 0.9723 0.966846 0.974203 +0.981559 0.988916 0.996273 1.00363 1.01099 1.01834 1.0257 1.03306 1.04041 +1.04777 1.05513 1.06248 1.06984 1.0772 1.08455 1.09191 1.09927 1.10663 +1.11398 1.12134 1.1287 1.13605 1.14341 1.15077 1.15812 1.16548 1.17284 +1.18019 1.18755 1.19491 1.20226 1.20962 1.21698 1.22433 1.23169 1.23905 +1.2464 1.25376 1.26112 1.26848 1.27583 1.28319 1.29055 1.2979 1.30526 +1.31262 1.31997 1.32733 1.33469 1.34204 1.3494 1.35676 1.36411 1.37147 +1.37883 1.38618 1.39354 1.4009 1.40825 1.41561 1.42297 1.43033 1.43768 +1.44504 1.4524 1.43825 1.42411 1.40997 1.39583 1.38169 1.36754 1.3534 +1.33926 1.32512 1.31098 1.29684 1.28269 1.26855 1.25441 1.24027 1.22613 +1.21198 1.19784 1.1837 1.16956 1.15542 1.14128 1.12713 1.11299 1.09885 +1.08471 1.07057 1.05642 1.04228 1.02814 1.02761 1.02707 1.02654 1.02601 +1.02547 1.02494 1.02441 1.02387 1.02334 1.02281 1.02227 1.02174 1.02121 +1.02068 1.02014 1.01961 1.01908 1.01854 1.01801 1.01748 1.01694 1.01641 +1.01588 1.01534 1.01481 1.01428 1.01374 1.01321 1.01268 1.01214 1.01161 +1.01108 1.01054 1.01001 1.00948 1.00894 1.00841 1.00788 1.00734 1.00681 +1.00628 1.00574 1.00521 1.00468 1.00414 1.00361 1.00308 1.00255 1.00201 +1.00148 1.00095 1.00041 0.999879 0.999346 0.998812 0.998279 0.997746 +0.997213 0.99668 0.996146 0.995613 0.99508 0.994547 0.994013 0.99348 +0.992947 0.992414 0.99188 0.991347 0.990814 0.990281 0.989748 0.989214 +0.988681 0.988148 0.987615 0.987081 0.986548 0.986015 0.985482 0.984948 +0.984415 0.983882 0.983349 0.982816 0.982282 0.981749 0.981216 0.980682 +0.980149 0.979616 0.979083 0.97855 0.978016 0.977483 0.97695 0.976417 +0.975883 0.97535 0.974817 0.974284 0.973751 0.973217 0.972684 0.972151 +0.971618 0.971084 0.970551 0.970018 0.969485 0.968951 0.95575 0.942548 +0.929346 0.916144 0.902942 0.88974 0.876538 0.863336 0.850134 0.836932 +0.82373 0.810529 0.797327 0.784125 0.770923 0.757721 0.744519 0.731317 +0.718115 0.704913 0.691711 0.67851 0.665308 0.652106 0.638904 0.625702 +0.6125 0.599298 0.586096 0.572894 0.559692 0.54649 0.533289 0.520087 +0.506885 0.493683 0.480481 0.467279 0.454077 0.440875 0.427673 0.414471 +0.401269 0.388068 0.374866 0.361664 0.348462 0.33526 0.322058; +#X coords 0 2 511 0 200 140 1 0 0; +#X restore 300 285 graph; +#X obj 55 234 pvwarpb~ pvwarpb-array, f 72; +#X obj 486 199 sig~ 0.0001; +#X obj 55 329 *~ 0.05; +#X obj 55 360 dac~; +#X obj 97 289 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 4000 1; +#X floatatom 94 309 5 0 0 0 - - -, f 5; +#X obj 55 161 readsf~; +#X obj 55 105 openpanel; +#X msg 55 130 open \$1; +#X msg 55 78 bang; +#X msg 123 130 1; +#X text 91 82 load sf; +#X msg 201 158 autofunc 0.2 1.7; +#X obj 436 190 sig~ 1; +#X floatatom 386 150 5 0 0 0 - - -, f 5; +#X obj 389 115 hsl 128 15 0 1 0 0 empty empty function-read-offset +-2 -8 0 10 -262144 -1 -1 0 1; +#X obj 439 149 hsl 128 15 0.2 2 0 0 empty empty transposition -2 -8 +0 10 -262144 -1 -1 3500 1; +#X text 42 446 Spectrum warper. An internal frequency warping function +is created either with the autofunc message. Try it on vocal sounds. +In this version \, the warp function is read from a Pd array; +#X connect 1 0 3 0; +#X connect 2 0 1 3; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 5 0 6 0; +#X connect 6 0 3 1; +#X connect 7 0 1 0; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 8 0; +#X connect 11 0 7 0; +#X connect 13 0 1 0; +#X connect 14 0 1 2; +#X connect 15 0 1 1; +#X connect 16 0 15 0; +#X connect 17 0 14 0; diff --git a/externals/fftease/fftease32-helpfiles/pvwarp~-help.pd b/externals/fftease/fftease32-helpfiles/pvwarp~-help.pd new file mode 100644 index 000000000..dccf1dfc2 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/pvwarp~-help.pd @@ -0,0 +1,68 @@ +#N canvas 891 601 544 383 10; +#X obj 34 179 pvwarp~, f 63; +#X obj 34 140 readsf~; +#X obj 34 84 openpanel; +#X msg 34 109 open \$1; +#X msg 34 57 bang; +#X msg 102 109 1; +#X text 70 61 load sf; +#X obj 34 264 *~ 0.05; +#X obj 34 295 dac~; +#X obj 76 224 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 73 244 5 0 0 0 - - -, f 5; +#X obj 379 117 sig~ 0.0001; +#X floatatom 367 97 5 0 0 0 - - -, f 5; +#X floatatom 318 124 5 0 0 0 - - -, f 5; +#X msg 177 86 autofunc 0.1 2; +#N canvas 946 176 450 300 a-lump 0; +#X obj 85 206 outlet; +#X obj 85 172 pack f f f; +#X floatatom 175 93 5 0 0 0 - - -, f 5; +#X obj 175 114 t b f; +#X floatatom 123 88 5 0 0 0 - - -, f 5; +#X obj 123 109 t b f; +#X floatatom 62 87 5 0 0 0 - - -, f 5; +#X msg 61 29 667 0.45 0.25; +#X obj 62 54 unpack f f f; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 3 1 1 2; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 5 1 1 1; +#X connect 6 0 1 0; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 8 1 4 0; +#X connect 8 2 2 0; +#X restore 166 121 pd a-lump; +#X obj 166 143 unpack f f f; +#X obj 370 63 hsl 128 15 0.25 2 0 0 empty empty Transposition -2 -8 +0 10 -262144 -1 -1 0 1; +#X obj 279 29 hsl 128 15 0 1 0 0 empty empty function-read-offset -2 +-8 0 10 -262144 -1 -1 0 1; +#X text 32 327 Spectrum warper. An internal frequency warping function +is created either according to specification or with the autofunc message. +Try it on vocal sounds.; +#X connect 0 0 7 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 9 0 10 0; +#X connect 10 0 7 1; +#X connect 11 0 0 9; +#X connect 12 0 0 8; +#X connect 13 0 0 7; +#X connect 14 0 0 0; +#X connect 15 0 16 0; +#X connect 16 0 0 1; +#X connect 16 1 0 2; +#X connect 16 2 0 3; +#X connect 17 0 12 0; +#X connect 18 0 13 0; diff --git a/externals/fftease/fftease32-helpfiles/reanimator~-help.pd b/externals/fftease/fftease32-helpfiles/reanimator~-help.pd new file mode 100644 index 000000000..3eb956f3d --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/reanimator~-help.pd @@ -0,0 +1,76 @@ +#N canvas 892 417 468 461 10; +#X obj 148 169 reanimator~ 2000; +#X obj 148 104 readsf~; +#X obj 148 48 openpanel; +#X msg 148 73 open \$1; +#X msg 148 21 bang; +#X msg 216 73 1; +#X text 184 25 load driver sf; +#X obj 287 111 readsf~; +#X obj 287 55 openpanel; +#X msg 287 80 open \$1; +#X msg 287 28 bang; +#X text 323 32 load texture sf; +#X obj 148 324 *~ 0.05; +#X obj 148 355 dac~; +#X obj 190 284 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 187 304 5 0 0 0 - - -, f 5; +#X floatatom 274 232 5 0 0 0 - - -, f 5; +#X floatatom 183 232 5 0 0 0 - - -, f 5; +#N canvas 404 737 450 300 showframe 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 183 208 pd showframe; +#X msg 37 122 analyze; +#X text 26 385 reanimator~ first analyzes a "texture" sound \, and +then resynthesizes a "driver" sound by finding the spectral frame in +the texture sound that is closest to the current driver frame.; +#N canvas 404 737 450 300 show-analysis-progress 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 274 208 pd show-analysis-progress; +#X connect 0 0 12 0; +#X connect 0 1 18 0; +#X connect 0 2 21 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 8 0; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; +#X connect 18 0 17 0; +#X connect 19 0 0 0; +#X connect 21 0 16 0; diff --git a/externals/fftease/fftease32-helpfiles/resent~-help.pd b/externals/fftease/fftease32-helpfiles/resent~-help.pd new file mode 100644 index 000000000..23b35bc9b --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/resent~-help.pd @@ -0,0 +1,129 @@ +#N canvas 932 503 426 468 10; +#X obj 162 102 readsf~; +#X obj 162 46 openpanel; +#X msg 162 71 open \$1; +#X msg 162 19 bang; +#X msg 230 71 1; +#X text 198 23 load sf; +#X obj 162 149 resent~ 6000; +#N canvas 404 737 450 300 showsync 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 239 178 pd showsync; +#X floatatom 239 203 5 0 0 0 - - -, f 5; +#X obj 162 296 *~ 0.05; +#X obj 162 327 dac~; +#X obj 204 256 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 201 276 5 0 0 0 - - -, f 5; +#X msg 24 42 acquire_sample; +#X obj 26 119 r resent-msgs; +#N canvas 1044 90 450 300 speed-and-phase 0; +#X obj 124 236 s resent-msgs; +#X msg 23 139 setspeed \$1; +#X floatatom 23 113 5 0 0 0 - - -, f 5; +#X obj 26 84 hsl 128 15 -2 2 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X msg 267 189 addphase \$1; +#X floatatom 267 167 5 0 0 0 - - -, f 5; +#X obj 270 138 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 122 168 5 0 0 0 - - -, f 5; +#X obj 125 139 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X msg 122 190 setphase \$1; +#X msg 234 81 setspeed_and_phase \$1 \$2; +#X msg 237 31 1 0; +#X msg 278 32 0 0; +#X msg 324 31 -1 1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 7 0 9 0; +#X connect 8 0 7 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 10 0; +#X connect 12 0 10 0; +#X connect 13 0 10 0; +#X restore 242 322 pd speed-and-phase; +#N canvas 133 590 450 300 oscbank 0; +#X obj 124 236 s resent-msgs; +#X msg 103 144 oscbank \$1; +#X obj 103 96 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 190 140 transpose \$1; +#X floatatom 192 110 5 0 0 0 - - -, f 5; +#X obj 197 66 hsl 128 15 0.1 2 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X msg 312 184 synthresh \$1; +#X msg 309 145 0.001; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X restore 241 351 pd oscbank; +#N canvas 775 566 719 379 individual-bin-control 0; +#X obj 34 343 s resent-msgs; +#X msg 115 152 linespeed 0 -1 511 1; +#X msg 183 184 randspeed 0.5 0.9; +#X msg 245 217 randphase 0 1; +#X msg 340 311 setspeed_and_phase \$1 \$2; +#X msg 340 278 0 0; +#X text 369 274 first freeze sound to hear effects; +#X msg 32 174 bin \$1 \$2; +#X obj 32 126 pack f f; +#X floatatom 87 69 5 0 0 0 - - -, f 5; +#X floatatom 26 44 5 0 511 0 - - -, f 5; +#X text 128 69 speed; +#X text 70 47 bin number; +#X text 108 119 terminal value limited by FFT size / 2; +#X text 255 151 linear distribution of speeds. (we assume here an FFT +size of 1024.); +#X text 310 183 likewise for phase; +#X text 339 217 randomly set all speeds within min/max parameters; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 7 0 0 0; +#X connect 8 0 7 0; +#X connect 9 0 8 1; +#X connect 10 0 8 0; +#X restore 242 294 pd individual-bin-control; +#X text 28 394 resent~ follows the model of residency~ but allows independent +control over each bin. It is recommended that you familiarize yourself +with residency~ before working with the more complicated resent~; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 6 0 9 0; +#X connect 6 1 7 0; +#X connect 7 0 8 0; +#X connect 9 0 10 0; +#X connect 9 0 10 1; +#X connect 11 0 12 0; +#X connect 12 0 9 1; +#X connect 13 0 6 0; +#X connect 14 0 6 0; diff --git a/externals/fftease/fftease32-helpfiles/residency_buffer~-help.pd b/externals/fftease/fftease32-helpfiles/residency_buffer~-help.pd new file mode 100644 index 000000000..37f5a1844 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/residency_buffer~-help.pd @@ -0,0 +1,76 @@ +#N canvas 771 474 726 482 10; +#N canvas 0 22 450 278 (subpatch) 0; +#X array analysis-array1 1.76744e+06 float 2; +#X coords 0 32767 1.76744e+06 -32768 200 140 1 0 0; +#X restore 456 47 graph; +#X obj 88 148 residency_buffer~ analysis-array1; +#X obj 88 119 readsf~; +#X obj 88 63 openpanel; +#X msg 88 88 open \$1; +#X msg 88 36 bang; +#X msg 156 88 1; +#X text 124 40 load sf; +#X obj 89 260 *~ 0.05; +#X obj 89 291 dac~; +#X obj 131 220 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 128 240 5 0 0 0 - - -, f 5; +#X floatatom 204 71 5 0 0 0 - - -, f 5; +#X floatatom 272 73 5 0 0 0 - - -, f 5; +#X obj 274 29 hsl 128 15 0 1 0 0 empty empty position -2 -8 0 10 -262144 +-1 -1 8900 1; +#X msg 5 117 calcbuf 5000; +#X msg 273 216 set \$1; +#X msg 273 242 1.76745e+06; +#N canvas 404 737 450 300 showsync 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 220 269 pd showsync; +#X floatatom 220 294 5 0 0 0 - - -, f 5; +#X obj 200 112 sig~ 0; +#X obj 276 108 sig~ 0; +#X msg 11 12 acquire_sample; +#X text 458 191 warning: do not write into this array \, as you will +create extremely loud glitches if you do so.; +#X text 46 349 residency_buffer~ is like residency~ except that it +uses a Pd array rather than an internal buffer. This makes it more +complicated to work with \, but potentially more efficient than residency~. +Any number of units may access the same array (or different ones). +The array name is the obbligatory first argument. Do NOT attempt to +play the recorded buffer with tabread~ or other time-domain audio objects +unless you have some idea of what you are doing (and turn the volume +way down before attempting this).; +#X text 353 243 required array size; +#X connect 1 0 8 0; +#X connect 1 1 18 0; +#X connect 1 2 16 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 2 0; +#X connect 8 0 9 0; +#X connect 8 0 9 1; +#X connect 10 0 11 0; +#X connect 11 0 8 1; +#X connect 12 0 20 0; +#X connect 13 0 21 0; +#X connect 14 0 13 0; +#X connect 15 0 1 0; +#X connect 16 0 17 0; +#X connect 18 0 19 0; +#X connect 20 0 1 1; +#X connect 21 0 1 2; +#X connect 22 0 1 0; diff --git a/externals/fftease/fftease32-helpfiles/residency~-help.pd b/externals/fftease/fftease32-helpfiles/residency~-help.pd new file mode 100644 index 000000000..bdfc8e0b2 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/residency~-help.pd @@ -0,0 +1,62 @@ +#N canvas 759 530 540 383 10; +#X obj 109 147 residency~ 5000; +#X obj 109 114 readsf~; +#X obj 109 56 openpanel; +#X msg 109 81 open \$1; +#X msg 109 29 bang; +#X msg 177 81 1; +#X text 145 33 load sf; +#X obj 109 239 *~ 0.05; +#X obj 109 270 dac~; +#X obj 151 199 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 12700 1; +#X floatatom 148 219 5 0 0 0 - - -, f 5; +#N canvas 404 737 450 300 showsync 0; +#X obj 205 102 inlet~; +#X obj 205 159 snapshot~; +#X obj 325 121 metro 50; +#X obj 325 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 325 22 loadbang; +#X msg 325 57 1; +#X obj 205 225 outlet; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 346 212 pd showsync; +#X floatatom 346 237 5 0 0 0 - - -, f 5; +#X floatatom 233 105 5 0 0 0 - - -, f 5; +#X floatatom 359 110 5 0 0 0 - - -, f 5; +#X msg 276 39 0 0; +#X obj 276 64 unpack f f; +#X msg 13 59 acquire_sample; +#X obj 364 54 hsl 128 15 0 1 0 0 empty empty position -2 -8 0 10 -262144 +-1 -1 2200 1; +#X obj 276 10 loadbang; +#X text 274 105 speed; +#X text 108 306 residency~ samples input to an internal buffer \, after +which the sound can be resynthesized with arbitrary speed and pitch. +; +#X connect 0 0 7 0; +#X connect 0 1 11 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 9 0 10 0; +#X connect 10 0 7 1; +#X connect 11 0 12 0; +#X connect 13 0 0 1; +#X connect 14 0 0 2; +#X connect 15 0 16 0; +#X connect 16 0 13 0; +#X connect 16 1 14 0; +#X connect 17 0 0 0; +#X connect 18 0 14 0; +#X connect 19 0 15 0; diff --git a/externals/fftease/fftease32-helpfiles/schmear~-help.pd b/externals/fftease/fftease32-helpfiles/schmear~-help.pd new file mode 100644 index 000000000..f29dac22e --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/schmear~-help.pd @@ -0,0 +1,68 @@ +#N canvas 663 510 451 371 10; +#X obj 152 146 schmear~; +#X obj 152 234 *~ 0.05; +#X obj 152 265 dac~; +#X obj 194 194 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 191 214 5 0 0 0 - - -, f 5; +#X obj 40 116 r schmear-msgs; +#X obj 152 98 osc~ 140; +#N canvas 1092 277 472 423 vibrato 0; +#X obj 110 127 osc~ 0.3; +#X obj 110 173 *~ 50; +#X obj 109 214 +~ 100; +#X obj 109 261 *~; +#X obj 229 71 inlet; +#X obj 106 340 outlet~; +#X obj 107 303 +~ 140; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 6 0; +#X connect 4 0 3 1; +#X connect 6 0 5 0; +#X restore 101 54 pd vibrato; +#X obj 101 21 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 1290 542 450 300 impulses 0; +#X msg 27 90 schmimp 1; +#X msg 36 121 schmimp 0 0 0 0 0 0 0.25 0 0 1 1 1 1; +#X msg 46 146 schmimp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.001 0 1 0 +0 1 0 0 0 1; +#X msg 63 184 schmimp 0 0 0 0 0 0 0 0 0 0 1 0.1 0 1 0.1 0 0.1 1 0.1 +0 0; +#X obj 41 247 s schmear-msgs; +#X text 92 92 no smear; +#X text 227 105 a few different kernels:; +#X connect 0 0 4 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X restore 276 91 pd impulses; +#N canvas 1159 204 450 300 control 0; +#X obj 49 185 s schmear-msgs; +#X msg 51 135 threshold \$1; +#X floatatom 49 98 5 0 0 0 - - -, f 5; +#X obj 56 67 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X msg 248 138 shift \$1; +#X floatatom 249 109 5 0 511 0 - - -, f 5; +#X text 246 84 shift bin energy upward; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X restore 276 116 pd control; +#X text 51 290 schmear~ convolves the amplitude spectrum with a user-supplied +impulse response \, thus smearing the spectrum \, for those times when +you need a New York moment.; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 1 1; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 8 0 7 0; diff --git a/externals/fftease/fftease32-helpfiles/scrape~-help.pd b/externals/fftease/fftease32-helpfiles/scrape~-help.pd new file mode 100644 index 000000000..8e4dbfe93 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/scrape~-help.pd @@ -0,0 +1,46 @@ +#N canvas 764 423 510 389 10; +#X obj 50 150 scrape~, f 33; +#X obj 50 110 readsf~; +#X obj 50 54 openpanel; +#X msg 50 79 open \$1; +#X msg 50 27 bang; +#X text 86 31 load sf; +#X obj 50 227 *~ 0.05; +#X obj 50 258 dac~; +#X obj 92 187 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 89 207 5 0 0 0 - - -, f 5; +#X floatatom 284 19 5 0 0 1 knee scrape-knee -, f 5; +#X floatatom 285 39 5 0 0 1 cutoff scrape-cutoff -, f 5; +#X floatatom 284 62 5 0 0 1 thresh1 scrape-t1 -, f 5; +#X floatatom 285 82 5 0 0 1 thresh2 scrape-t2 -, f 5; +#X floatatom 285 104 5 0 0 1 weak-bin-multiplier scrape-wbm -, f 5 +; +#N canvas 1271 554 450 300 init 0; +#X msg 72 99 \; scrape-knee 1000 \; scrape-cutoff 4000 \; scrape-t1 +0.001 \; scrape-t2 0.05 \; scrape-wbm 0.1; +#X obj 72 65 loadbang; +#X connect 1 0 0 0; +#X restore 284 147 pd init; +#X text 39 280 scrape~ is like drown~ except that it only operates +between the frequencies specified by knee and cutoff to the Nyquist. +Between knee and cutoff is a transition range to gradually increase +the noise reduction. This is good if you just want to scrape some noise +off the upper frequency range without affecting lower parts of the +spectrum (much).; +#X msg 118 79 1; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 8 0 9 0; +#X connect 9 0 6 1; +#X connect 10 0 0 1; +#X connect 11 0 0 2; +#X connect 12 0 0 3; +#X connect 13 0 0 4; +#X connect 14 0 0 5; +#X connect 17 0 1 0; diff --git a/externals/fftease/fftease32-helpfiles/shapee~-help.pd b/externals/fftease/fftease32-helpfiles/shapee~-help.pd new file mode 100644 index 000000000..c8cf34061 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/shapee~-help.pd @@ -0,0 +1,38 @@ +#N canvas 736 486 451 368 10; +#X obj 27 107 readsf~; +#X obj 27 51 openpanel; +#X msg 27 76 open \$1; +#X msg 27 24 bang; +#X msg 95 76 1; +#X obj 187 110 readsf~; +#X obj 187 54 openpanel; +#X msg 187 79 open \$1; +#X msg 187 27 bang; +#X text 63 28 load frequency sf; +#X text 223 31 load formant sf; +#X floatatom 355 113 5 1 511 2 shape-width - -, f 5; +#X obj 27 247 *~ 0.05; +#X obj 27 278 dac~; +#X obj 69 207 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 66 227 5 0 0 0 - - -, f 5; +#X obj 27 167 shapee~; +#X text 23 308 shapee~ shapes the frequency evolution of one signal +with that of another. The shape width controls the amount of the frequency +shaping effect.; +#X connect 0 0 16 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 16 1; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 11 0 16 2; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; +#X connect 16 0 12 0; diff --git a/externals/fftease/fftease32-helpfiles/smap-help.pd b/externals/fftease/fftease32-helpfiles/smap-help.pd new file mode 100644 index 000000000..37a53b9e2 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/smap-help.pd @@ -0,0 +1,9 @@ +#N canvas 246 169 450 300 10; +#X obj 141 163 smap 0 4; +#X obj 144 113 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 141 195 5 0 0 0 - - -; +#X text 49 56 remap a 0-127 MIDI input range to the output range specified +in the arguments; +#X connect 0 0 2 0; +#X connect 1 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/sound/Piano.aif b/externals/fftease/fftease32-helpfiles/sound/Piano.aif new file mode 100644 index 0000000000000000000000000000000000000000..837dbc6350a4e8b63b4794fa09d45d8b991a0e85 GIT binary patch literal 92812 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�$4Pk>-KpwoP%>W_w)g`05 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 literal 0 HcmV?d00001 diff --git a/externals/fftease/fftease32-helpfiles/swinger~-help.pd b/externals/fftease/fftease32-helpfiles/swinger~-help.pd new file mode 100644 index 000000000..9b909cf9f --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/swinger~-help.pd @@ -0,0 +1,37 @@ +#N canvas 803 561 465 402 10; +#X obj 113 188 swinger~; +#X obj 55 119 readsf~; +#X obj 55 63 openpanel; +#X msg 55 88 open \$1; +#X msg 55 36 bang; +#X msg 123 88 1; +#X obj 222 120 readsf~; +#X obj 222 64 openpanel; +#X msg 222 89 open \$1; +#X msg 222 37 bang; +#X text 91 40 load amplitude sf; +#X text 258 41 load phase sf; +#X obj 156 241 *~ 0.05; +#X obj 156 272 dac~; +#X obj 198 201 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 8300 1; +#X floatatom 195 221 5 0 0 0 - - -, f 5; +#X text 48 309 swinger~ replaces the phases of one signal (left) with +those from another (right). The result often sounds like victory. A +swinging trick: Don't connect any signal to the right inlet and listen +to the result.; +#X connect 0 0 12 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 0 1; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; diff --git a/externals/fftease/fftease32-helpfiles/taint~-help.pd b/externals/fftease/fftease32-helpfiles/taint~-help.pd new file mode 100644 index 000000000..49c9a88c4 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/taint~-help.pd @@ -0,0 +1,82 @@ +#N canvas 638 328 720 564 10; +#X obj 153 253 taint~, f 18; +#X obj 301 112 expr pow(10 \, $f1/20); +#X floatatom 301 55 5 -180 0 0 - taint-invthresh -, f 5; +#X floatatom 230 201 5 0 0 0 - taint-scaleexp -, f 5; +#X obj 38 105 readsf~; +#X obj 38 49 openpanel; +#X msg 38 74 open \$1; +#X msg 38 22 bang; +#X msg 106 74 1; +#X text 74 26 load sf; +#X obj 156 105 readsf~; +#X obj 156 49 openpanel; +#X msg 156 74 open \$1; +#X msg 156 22 bang; +#X text 192 26 load sf; +#X obj 161 334 *~ 0.05; +#X obj 161 365 dac~; +#X obj 203 294 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 3900 1; +#X floatatom 200 314 5 0 0 0 - - -, f 5; +#X text 28 404 taint~ multiplies the spectra of two input signals. +Multiplication of spectra can cause significant drops in the amplitude +of the output signal. The inverse option allows division of the input +spectra. Division requires the use of a threshold to avert division +by zero. Also \, signal division will cause massive amplitude gains. +Be careful of your ears and equipment. Start the amplitude very low +(-100dB) and slowly work up to an acceptable level. A pad is provided +to balance gain between normal and invert options.; +#X obj 24 197 r taint-msgs; +#N canvas 1384 608 450 300 control 0; +#X obj 115 206 s taint-msgs; +#X floatatom 114 54 5 0 0 0 - taint-pad -, f 5; +#X obj 114 77 expr pow(10 \, $f1/20); +#X floatatom 114 99 5 0 0 0 - - -, f 5; +#X msg 114 118 pad \$1; +#X msg 287 146 invert \$1; +#X obj 287 113 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 21 11 this pad only affects the gain when "invert" is turned +on thus it may be used to balance levels between the two states of +taint~; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X restore 257 337 pd control; +#N canvas 0 22 450 300 init 1; +#X obj 185 126 loadbang; +#X msg 182 165 \; taint-pad -36 \; taint-scaleexp 0.2 \; taint-invthresh +-40; +#X connect 0 0 1 0; +#X restore 258 362 pd init; +#X text 339 50 inverse threshold (lower values intensify effect but +only when "invert" is turned on); +#X text 278 202 scaling exponent (lower values increase amplitude) +; +#X obj 492 289 hsl 128 15 0.05 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 1200 1; +#X obj 489 309 s taint-scaleexp; +#X connect 0 0 15 0; +#X connect 1 0 0 3; +#X connect 2 0 1 0; +#X connect 3 0 0 2; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 8 0 4 0; +#X connect 8 0 10 0; +#X connect 10 0 0 1; +#X connect 11 0 12 0; +#X connect 12 0 10 0; +#X connect 13 0 11 0; +#X connect 15 0 16 0; +#X connect 15 0 16 1; +#X connect 17 0 18 0; +#X connect 18 0 15 1; +#X connect 20 0 0 0; +#X connect 25 0 26 0; diff --git a/externals/fftease/fftease32-helpfiles/thresher~-help.pd b/externals/fftease/fftease32-helpfiles/thresher~-help.pd new file mode 100644 index 000000000..1b67ca7c1 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/thresher~-help.pd @@ -0,0 +1,45 @@ +#N canvas 815 263 505 512 10; +#X obj 100 193 thresher~; +#X obj 45 108 readsf~; +#X obj 45 52 openpanel; +#X msg 45 77 open \$1; +#X msg 45 25 bang; +#X msg 113 77 1; +#X text 81 29 load sf; +#X floatatom 164 136 5 0 0 0 - - -, f 5; +#X floatatom 290 137 5 0 0 0 - - -, f 5; +#X obj 294 -19 vsl 15 128 0.7 1 0 0 empty thresher-damp empty 0 -9 +0 10 -262144 -1 -1 12067 1; +#X obj 164 -19 vsl 15 128 0 0.5 0 0 empty thresher-thresh empty 0 -9 +0 10 -262144 -1 -1 900 1; +#X obj 108 273 *~ 0.05; +#X obj 108 304 dac~; +#X obj 150 233 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 12700 1; +#X floatatom 147 253 5 0 0 0 - - -, f 5; +#X text 46 330 thresher~ sustains the amplitude and frequency in lower-energy +FFT bins. The extent of this effect is controlled by the threshold +parameter: at 0 all frames pass \, at higher values more frames are +sustained. The damping factor controls the decay time. A value of 1 +gives an infinite freeze.; +#X text 329 137 damping factor; +#X text 201 139 threshold; +#N canvas 0 22 450 300 init 0; +#X msg 164 150 \; thresher-thresh 0.05 \; thresher-damp 0.9; +#X obj 214 82 loadbang; +#X connect 1 0 0 0; +#X restore 334 211 pd init; +#X connect 0 0 11 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 7 0 0 1; +#X connect 8 0 0 2; +#X connect 9 0 8 0; +#X connect 10 0 7 0; +#X connect 11 0 12 0; +#X connect 11 0 12 1; +#X connect 13 0 14 0; +#X connect 14 0 11 1; diff --git a/externals/fftease/fftease32-helpfiles/vacancy~-help.pd b/externals/fftease/fftease32-helpfiles/vacancy~-help.pd new file mode 100644 index 000000000..d151b829c --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/vacancy~-help.pd @@ -0,0 +1,64 @@ +#N canvas 713 398 517 445 10; +#X obj 152 182 vacancy~; +#X obj 146 115 readsf~; +#X obj 146 59 openpanel; +#X msg 146 84 open \$1; +#X msg 146 32 bang; +#X msg 214 84 1; +#X text 182 36 load sf; +#X obj 263 114 readsf~; +#X obj 263 58 openpanel; +#X msg 263 83 open \$1; +#X msg 263 31 bang; +#X text 299 35 load sf; +#X obj 183 227 *~ 0.05; +#X obj 183 258 dac~; +#X obj 225 187 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 6700 1; +#X floatatom 222 207 5 0 0 0 - - -, f 5; +#X floatatom 357 129 5 0 0 0 - - -, f 5; +#X obj 23 139 r vacancy-msgs; +#N canvas 1360 274 450 300 control 0; +#X obj 129 174 s vacancy-msgs; +#X msg 98 107 rms \$1; +#X obj 98 62 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 178 55 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 178 100 invert \$1; +#X obj 272 69 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 272 114 swapphase \$1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X restore 44 225 pd control; +#X text 45 296 vacancy~ performs spectral compositing. The threshold +controls the compositing. Useful values lie in the range from -90 dB +to 90 dB. Threshold inversion is available via the invert message. +The threshold can also track the current RMS value of of the signal. +In RMS tracking mode \, the useful threshold range will be somewhat +different depending upon the character of the input signals. Phases +will be derived from the left input unless phase swapping is specified. +In this case phases will be taken from the right input signal when +the threshold test is true.; +#X connect 0 0 12 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 8 0; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; +#X connect 16 0 0 2; +#X connect 17 0 0 0; diff --git a/externals/fftease/fftease32-helpfiles/xsyn~-help.pd b/externals/fftease/fftease32-helpfiles/xsyn~-help.pd new file mode 100644 index 000000000..07392a771 --- /dev/null +++ b/externals/fftease/fftease32-helpfiles/xsyn~-help.pd @@ -0,0 +1,35 @@ +#N canvas 879 506 472 383 10; +#X obj 149 181 xsyn~; +#X obj 31 100 readsf~; +#X obj 31 44 openpanel; +#X msg 31 69 open \$1; +#X msg 31 17 bang; +#X msg 99 69 1; +#X text 67 21 load sf; +#X obj 200 113 readsf~; +#X obj 200 57 openpanel; +#X msg 200 82 open \$1; +#X msg 200 30 bang; +#X text 236 34 load sf; +#X obj 152 234 *~ 0.05; +#X obj 152 265 dac~; +#X obj 194 194 hsl 128 15 0 1 0 0 empty empty Gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 191 214 5 0 0 0 - - -, f 5; +#X text 34 320 xsyn~ filters the first input with the second input +\, creating a spectral cross synthesis effect.; +#X connect 0 0 12 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 5 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 8 0; +#X connect 12 0 13 0; +#X connect 12 0 13 1; +#X connect 14 0 15 0; +#X connect 15 0 12 1; diff --git a/externals/fftease/fftease_setup.c b/externals/fftease/fftease_setup.c new file mode 100644 index 000000000..981bc1339 --- /dev/null +++ b/externals/fftease/fftease_setup.c @@ -0,0 +1,5 @@ +void fftease_setup(void) +{ +// post("Loaded FFTease Library"); +// printf("Loaded FFTease Library(2)"); +} diff --git a/externals/fftease/fftease_utilities.c b/externals/fftease/fftease_utilities.c new file mode 100644 index 000000000..3ccacac28 --- /dev/null +++ b/externals/fftease/fftease_utilities.c @@ -0,0 +1,276 @@ +#include "fftease.h" +#define FFTEASE_LIB_VERSION "FFTease library 3.0 Pd 32-bit version" + +void fftease_noalias(t_fftease* fft, short flag) +{ + fft->noalias = flag; +} + +int fftease_fft_size( int testfft ) +{ +int test = 2; + if( testfft <= 0 ) + return DEFAULT_FFTEASE_FFTSIZE; + while( test < testfft && test < FFTEASE_MAX_FFTSIZE){ + test *= 2; + } + if( test != testfft ){ + post("incorrect FFT size specified, using %d", DEFAULT_FFTEASE_FFTSIZE); + test = DEFAULT_FFTEASE_FFTSIZE; + } + if( test == FFTEASE_MAX_FFTSIZE){ + post("fftsize capped at maximum: %d", test); + } + return test; +} + +void fftease_set_fft_buffers(t_fftease *fft) +{ + if( fft->D <= 0 || fft->MSPVectorSize <= 0 ){ + return; + } + // post("setting up FFTease buffers"); + fft->operationCount = 0; + if( fft->D > fft->MSPVectorSize ){ + fft->operationRepeat = fft->D / fft->MSPVectorSize; + fft->bufferStatus = BIGGER_THAN_MSP_VECTOR; + // post("fftease_set_fft_buffers: bigger than MSP vector"); + } else if( fft->D < fft->MSPVectorSize ){ + fft->operationRepeat = fft->MSPVectorSize / fft->D; + fft->bufferStatus = SMALLER_THAN_MSP_VECTOR; + // post("fftease_set_fft_buffers: smaller than MSP buffer"); + } else { + fft->operationRepeat = 1; + fft->bufferStatus = EQUAL_TO_MSP_VECTOR; + // post("fftease_set_fft_buffers: equal to MSP buffer"); + } +} + +int fftease_overlap( int overlap ) +{ + int target = 1; + while( target < overlap && target < 64 ){ + target *= 2; + } + if( target != overlap ){ + error("fftease_overlap: %d is not a legal overlap factor",overlap); + return 1; + } + return overlap; +} + +int fftease_winfac( int winfac) +{ + int target = 1; + while( target < winfac && target < 64 ){ + target *= 2; + } + if( target != winfac ){ + // error("%d is not a legal window factor", winfac); + return 1; + } + return winfac; +} + +void fftease_oscbank_setbins(t_fftease *fft, t_float lowfreq, t_float highfreq) +{ + if(fft->initialized == -1){ + post("oscbank setbins inhibited"); + return; + } + t_float curfreq = 0; + fft->hi_bin = 1; + int N2 = fft->N2; + while(curfreq < highfreq){ + ++(fft->hi_bin); + curfreq += fft->c_fundamental; + } + fft->lo_bin = 0; + curfreq = 0; + while(curfreq < lowfreq){ + ++(fft->lo_bin); + curfreq += fft->c_fundamental; + } + if(fft->hi_bin > N2) + fft->hi_bin = N2; +// post("lowfreq %f highfreq %f low bin %d high bin %d",lowfreq, highfreq, fft->lo_bin, fft->hi_bin); +} + +void fftease_init(t_fftease *fft) +{ + int i; + int mem; + if(fft->initialized == -1){ + // post("fftease_init manually aborted with initialization status -1"); + return; + } + if(!fft->R){ + // post("fftease_init: zero sample rate, aborting init"); + return; + } + // fft->init_status = 0; + fft->overlap = fftease_overlap(fft->overlap); + fft->winfac = fftease_winfac(fft->winfac); + + if(fft->P <= 0) + fft->P = 1.0; + fft->N = fftease_fft_size( fft->N ); + fft->D = fft->N / fft->overlap; + fft->Nw = fft->N * fft->winfac; + + fft->Iinv = 1.0/fft->D; + fft->N2 = fft->N / 2; + fft->Nw2 = fft->Nw / 2; + + fft->in_count = -(fft->Nw); + fft->out_count = fft->in_count; + fft->mult = 1.0 / (t_float) fft->N; + fft->c_fundamental = (t_float) fft->R/(t_float) fft->N; + fft->c_factor_in = (t_float) fft->R/((t_float)fft->D * TWOPI); + fft->c_factor_out = TWOPI * (t_float) fft->D / (t_float) fft->R; + // fft->synt = 0.001; + fft->L = FFTEASE_OSCBANK_TABLESIZE; + fft->pitch_increment = fft->P * fft->L / fft->R; + fft->ffac = fft->P * PI / fft->N; + fft->nyquist = (t_float) fft->R / 2.0; + + if(! fft->initialized){ + // post("Initializing FFT Memory"); + fft->P = 1.0; + fft->obank_flag = 0; // default no oscbank + fft->lo_bin = 0; + fft->hi_bin = fft->N2; + mem = (fft->Nw) * sizeof(t_float); + fft->Wanal = (t_float *) calloc(1,mem); + fft->Wsyn = (t_float *) calloc(1,mem); + fft->Hwin = (t_float *) calloc(1,mem); + fft->input = (t_float *) calloc(1,mem); + fft->output = (t_float *) calloc(1,mem); + mem = (fft->N + 2) * sizeof(t_float); + fft->buffer = (t_float *) calloc(1,mem); + mem = (fft->N + 2) * sizeof(t_float); + fft->channel = (t_float *) calloc(1,mem); + mem = (fft->N * 2) * sizeof(int); + fft->bitshuffle = (int *) calloc(1,mem); + mem = (fft->N*2)*sizeof(t_float); + fft->trigland = (t_float *) calloc(1,mem); + mem = (fft->N2+1)*sizeof(t_float); + fft->c_lastphase_in = (t_float *) calloc(1,mem); + fft->c_lastphase_out = (t_float *)calloc(1,mem); + // oscbank stuff + mem = (fft->N+1)*sizeof(t_float); + fft->lastamp = (t_float *) calloc(1,mem); + fft->lastfreq = (t_float *) calloc(1,mem); + fft->bindex = (t_float *) calloc(1,mem); + mem = (2 + fft->L)*sizeof(t_float); // includes guardpoint + fft->table = (t_float *) calloc(1,mem); + // t_float buffering + mem = fft->D * sizeof(t_float); + fft->internalInputVector = (t_float *) calloc(1,mem); + fft->internalOutputVector = (t_float *) calloc(1,mem); + fft->initialized = 1; + } + else if( (fft->N == fft->last_N) && (fft->overlap == fft->last_overlap) && + (fft->winfac == fft->last_winfac) && (fft->last_R == fft->R) ) { + //post("fftease_init: no change in vital parameters so memory reallocation skipped"); + return; + } + else { + // post("Resizing FFT Memory"); + mem = (fft->Nw)*sizeof(t_float); + fft->Wanal = (t_float *) realloc((void *) fft->Wanal, mem); + fft->Wsyn = (t_float *) realloc((void *) fft->Wsyn, mem); + fft->Hwin = (t_float *)realloc((void *) fft->Hwin, mem); + fft->input = (t_float *) realloc((void *) fft->input, mem); + fft->output = (t_float *) realloc((void *) fft->output, mem); + mem = (fft->N + 2)*sizeof(t_float); + fft->buffer = (t_float *) realloc((void *) fft->buffer, mem); + mem = (fft->N+2)*sizeof(t_float); + fft->channel = (t_float *) realloc((void *) fft->channel, mem); + mem = (fft->N*2)*sizeof(int); + fft->bitshuffle = (int *) realloc((void *) fft->bitshuffle, mem); + mem = (fft->N*2)*sizeof(t_float); + fft->trigland = (t_float *) realloc((void *) fft->trigland, mem); + mem = (fft->N2+1)*sizeof(t_float); + fft->c_lastphase_in = (t_float *) realloc((void *) fft->c_lastphase_in, mem); + fft->c_lastphase_out = (t_float *)realloc((void *)fft->c_lastphase_out, mem); + mem = (fft->N+1)*sizeof(t_float); + fft->lastamp = (t_float *) realloc((void *) fft->lastamp, mem); + fft->lastfreq = (t_float *) realloc((void *) fft->lastfreq, mem); + fft->bindex = (t_float *) realloc((void *) fft->bindex, mem); + mem = fft->D * sizeof(t_float); + fft->internalInputVector = (t_float *)realloc((void *) fft->internalInputVector, mem); + fft->internalOutputVector = (t_float *) realloc((void *) fft->internalOutputVector, mem); + } + fft->last_N = fft->N; + fft->last_overlap = fft->overlap; + fft->last_winfac = fft->winfac; + fft->last_R = fft->R; + for ( i = 0; i < fft->L; i++ ) { + fft->table[i] = (t_float) fft->N * cos((t_float)i * TWOPI / (t_float)fft->L); + } + fft->table[fft->L] = fft->table[fft->L - 1]; // guard point + fftease_makewindows( fft->Hwin, fft->Wanal, fft->Wsyn, fft->Nw, fft->N, fft->D); + fftease_init_rdft( fft->N, fft->bitshuffle, fft->trigland); + fftease_set_fft_buffers(fft); + fftease_oscbank_setbins(fft,0,fft->nyquist); + fft->init_status = 1; +} + +void fftease_free(t_fftease *fft) +{ + if(fft->init_status == 1){ + + free(fft->trigland); + free(fft->bitshuffle); + free(fft->Wanal); + free(fft->Wsyn); + free(fft->Hwin); + free(fft->buffer); + + free(fft->channel); // this is the killer + + free(fft->input); + free(fft->output); + free(fft->internalInputVector); + free(fft->internalOutputVector); + free(fft->c_lastphase_in); + free(fft->c_lastphase_out); + free(fft->lastamp); + free(fft->lastfreq); + free(fft->bindex); + free(fft->table); + + } +} + +void fftease_fftinfo(t_fftease *fft, char *object_name) +{ + if( ! fft->overlap ){ + post("%s: zero overlap!", object_name); + return; + } + post("%s: FFT size %d, hopsize %d, windowsize %d, MSP Vector Size %d", object_name, + fft->N, fft->N/fft->overlap, fft->Nw, fft->MSPVectorSize); + post("%s\n", FFTEASE_LIB_VERSION); +} + +int fftease_msp_sanity_check(t_fftease *fft, char *oname) +{ + if( fft->R <= 0 || fft->R > 10000000 || fft->MSPVectorSize <= 0 || fft->D <= 0){ + post("%s is concerned that perhaps no audio driver has been loaded",oname); + post("R: %d, vector size: %d, D: %d", fft->R, fft->MSPVectorSize, fft->D); + return 0; + } else { + return 1; + } +} + +t_float fftease_randf(t_float min, t_float max) +{ + t_float randv; + + randv = (t_float) (rand() % 32768) / 32768.0 ; + return min + (max-min) * randv; +} + diff --git a/externals/fftease/fold.c b/externals/fftease/fold.c new file mode 100644 index 000000000..73cb068cc --- /dev/null +++ b/externals/fftease/fold.c @@ -0,0 +1,32 @@ +#include "fftease.h" + +/* + * multiply current input I by window W (both of length Nw); + * using modulus arithmetic, fold and rotate windowed input + * into output array O of (FFT) length N according to current + * input time n + */ + +void fftease_fold( t_fftease *fft ) +{ + int Nw = fft->Nw; + int N = fft->N; + t_float *Wanal = fft->Wanal; + t_float *input = fft->input; + t_float *buffer = fft->buffer; + int in_count = fft->in_count; + int i; + + memset(buffer, 0.0, N * sizeof(t_float)); + + while ( in_count < 0 ) + in_count += N; + in_count %= N; + for ( i = 0; i < Nw; i++ ) { + buffer[in_count] += input[i] * Wanal[i]; + if ( ++in_count == N ) + in_count = 0; + } + fft->in_count = (fft->in_count + fft->D) % fft->Nw; +} + diff --git a/externals/fftease/leaker~.c b/externals/fftease/leaker~.c new file mode 100644 index 000000000..65ca4406c --- /dev/null +++ b/externals/fftease/leaker~.c @@ -0,0 +1,308 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *leaker_class; + +#define OBJECT_NAME "leaker~" + +typedef struct _leaker +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; + int *sieve; + short mute; + t_float fade_value; +} t_leaker; + +void leaker_dsp(t_leaker *x, t_signal **sp); +t_int *leaker_perform(t_int *w); +static void leaker_free(t_leaker *x); +void *leaker_new(t_symbol *msg, short argc, t_atom *argv); +void leaker_upsieve(t_leaker *x) ; +void leaker_downsieve(t_leaker *x) ; +void leaker_randsieve(t_leaker *x) ; +void leaker_mute(t_leaker *x, t_floatarg state); +void leaker_init(t_leaker *x); + +void leaker_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("leaker~"), (t_newmethod)leaker_new, + (t_method)leaker_free,sizeof(t_leaker), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_leaker, x_f); + class_addmethod(c,(t_method)leaker_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)leaker_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)leaker_upsieve,gensym("upsieve"), 0); + class_addmethod(c,(t_method)leaker_downsieve,gensym("downsieve"), 0); + class_addmethod(c,(t_method)leaker_randsieve,gensym("randsieve"), 0); + + leaker_class = c; + fftease_announce(OBJECT_NAME); +} + +void leaker_free( t_leaker *x ){ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); + free(x->sieve); +} + +void leaker_upsieve(t_leaker *x) { + int i; + int *sieve = x->sieve; + for( i = 0; i < x->fft->N2; i++ ){ + sieve[i] = i + 1; + } +} + +void leaker_downsieve(t_leaker *x) { + int i; + int *sieve = x->sieve; + int N2 = x->fft->N2; + for( i = 0; i < N2; i++ ){ + sieve[i] = N2 - i; + } +} + +void leaker_randsieve(t_leaker *x) { + int i; + int temp; + int pos1, pos2; + int N2 = x->fft->N2; + int *sieve = x->sieve; + int maxswap = N2 - 1; + + for( i = 0; i < N2; i++ ){ + sieve[i] = i + 1; + } + while(maxswap > 0){ + pos1 = maxswap; + pos2 = rand() % (N2 - 1); + temp = sieve[pos1]; + sieve[pos1] = sieve[pos2]; + sieve[pos2] = temp; + --maxswap; + } +} + +void leaker_mute(t_leaker *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void *leaker_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + + t_leaker *x = (t_leaker *)pd_new(leaker_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + + fft->initialized = 0; + fft2->initialized = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + return x; +} + +void leaker_init(t_leaker *x) +{ + int i; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized) { + x->mute = 0; + x->fade_value = 0; + x->sieve = (int *) calloc((fft->N2 + 1),sizeof(int)); + } + if(initialized != 2){ + for(i = 0; i < fft->N2; i++){ + x->sieve[i] = i; + } + } +} + +void do_leaker(t_leaker *x) +{ + int i,odd,even; + t_float a1,a2,b1,b2; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int N2 = fft->N2; + t_float *buffer1 = fft->buffer; + t_float *buffer2 = fft2->buffer; + t_float *channel1 = fft->channel; + int *sieve = x->sieve; + t_float fade_value = x->fade_value; + + fftease_fold(fft); + fftease_fold(fft2); + fftease_rdft(fft,1); + fftease_rdft(fft2,1); + + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + if( fade_value <= 0 || fade_value < sieve[i] ){ + a1 = ( i == N2 ? *(buffer1+1) : *(buffer1+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(buffer1+odd) ); + + *(channel1+even) = hypot( a1, b1 ) ; + *(channel1+odd) = -atan2( b1, a1 ); + *(buffer1+even) = *(channel1+even) * cos(*(channel1+odd)); + if ( i != N2 ){ + *(buffer1+odd) = -(*(channel1+even)) * sin(*(channel1+odd)); + } + } else { + a2 = ( i == N2 ? *(buffer2+1) : *(buffer2+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(buffer2+odd) ); + *(channel1+even) = hypot( a2, b2 ) ; + *(channel1+odd) = -atan2( b2, a2 ); + *(buffer1+even) = *(channel1+even) * cos(*(channel1+odd) ); + if ( i != N2 ){ + *(buffer1+odd) = -(*(channel1+even)) * sin( *(channel1+odd) ); + } + } + } + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + + +t_int *leaker_perform(t_int *w) +{ + int i,j; + t_leaker *x = (t_leaker *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *fade_value = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + int N2 = fft->N2; + + x->fade_value = *fade_value * (float) N2; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_leaker(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_leaker(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_leaker(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void leaker_dsp(t_leaker *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + leaker_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(leaker_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); + } +} + + diff --git a/externals/fftease/leanconvert.c b/externals/fftease/leanconvert.c new file mode 100644 index 000000000..39d6ff389 --- /dev/null +++ b/externals/fftease/leanconvert.c @@ -0,0 +1,22 @@ +#include "fftease.h" + +void fftease_leanconvert(t_fftease *fft) + +{ + + int real, imag, amp, phase; + t_float a, b; + int i; + t_float *buffer = fft->buffer; + t_float *channel = fft->channel; + int N2 = fft->N2; + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? buffer[1] : buffer[real] ); + b = ( i == 0 || i == N2 ? 0. : buffer[imag] ); + channel[amp] = hypot( a, b ); + channel[phase] = -atan2( b, a ); + } +} + diff --git a/externals/fftease/leanunconvert.c b/externals/fftease/leanunconvert.c new file mode 100644 index 000000000..a333d89f1 --- /dev/null +++ b/externals/fftease/leanunconvert.c @@ -0,0 +1,19 @@ +#include "fftease.h" + + +void fftease_leanunconvert(t_fftease *fft) + +{ + int real, imag, amp, phase; + register int i; + t_float *buffer = fft->buffer; + t_float *channel = fft->channel; + int N2 = fft->N2; + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + buffer[real] = *(channel+amp) * cos( *(channel+phase) ); + if ( i != N2 ) + buffer[imag] = -*(channel+amp) * sin( *(channel+phase) ); + } +} diff --git a/externals/fftease/legacy.c b/externals/fftease/legacy.c new file mode 100644 index 000000000..4d40fa983 --- /dev/null +++ b/externals/fftease/legacy.c @@ -0,0 +1,83 @@ +#include "fftease.h" + +void old_overlapadd( float *I, int N, float *W, float *O, int Nw, int n ) + +{ + int i ; + while ( n < 0 ) + n += N ; + n %= N ; + for ( i = 0 ; i < Nw ; i++ ) { + O[i] += I[n]*W[i] ; + if ( ++n == N ) + n = 0 ; + } +} + + +void old_convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) +{ + float phase, + phasediff; + int real, + imag, + amp, + freq; + float a, + b; + int i; + + + for ( i = 0; i <= N2; i++ ) { + imag = freq = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? S[1] : S[real] ); + b = ( i == 0 || i == N2 ? 0. : S[imag] ); + + C[amp] = hypot( a, b ); + if ( C[amp] == 0. ) + phasediff = 0.; + else { + phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; + lastphase[i] = phase; + + while ( phasediff > PI ) + phasediff -= TWOPI; + while ( phasediff < -PI ) + phasediff += TWOPI; + } + C[freq] = phasediff*factor + i*fundamental; + } +} + + + +void old_unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ) + +{ + int i, + real, + imag, + amp, + freq; + float mag, + phase; +double sin(), cos(); + + for ( i = 0; i <= N2; i++ ) { + + imag = freq = ( real = amp = i<<1 ) + 1; + + if ( i == N2 ) + real = 1; + + mag = C[amp]; + lastphase[i] += C[freq] - i*fundamental; + phase = lastphase[i]*factor; + S[real] = mag*cos( phase ); + + if ( i != N2 ) + S[imag] = -mag*sin( phase ); + + } + +} diff --git a/externals/fftease/limit_fftsize.c b/externals/fftease/limit_fftsize.c new file mode 100644 index 000000000..25ff70fd4 --- /dev/null +++ b/externals/fftease/limit_fftsize.c @@ -0,0 +1,32 @@ +#include "fftease.h" + +extern void post(const char *fmt, ...); + +void fftease_limit_fftsize(int *N, int *Nw, char *OBJECT_NAME) +{ + if(*N > MAX_N){ + // post("%s: N set to maximum FFT size of %d",OBJECT_NAME,MAX_N); + *N = MAX_N; + } + if(*Nw > MAX_Nw){ + // post("%s: Nw set to maximum window size of %d",OBJECT_NAME,MAX_Nw); + *Nw = MAX_Nw; + } +} + +int fftease_FFT_size( int testfft ) +{ +int test = 2; + if( testfft <= 0 ) + return DEFAULT_FFTEASE_FFTSIZE; + while( test < testfft && test < FFTEASE_MAX_FFTSIZE){ + test *= 2; + } + if( test != testfft ){ + post("incorrect FFT size specified, using %d", test); + } + if( test == FFTEASE_MAX_FFTSIZE){ + post("fftsize capped at maximum: %d", test); + } + return test; +} \ No newline at end of file diff --git a/externals/fftease/limited_oscbank.c b/externals/fftease/limited_oscbank.c new file mode 100644 index 000000000..ed278dea8 --- /dev/null +++ b/externals/fftease/limited_oscbank.c @@ -0,0 +1,132 @@ +#include "fftease.h" +// extern void post(const char *fmt, ...); +#define PARANOID 0 + +void fftease_limited_oscbank( t_fftease *fft, int osclimit, t_float framethresh) +{ + int amp,freq,chan, n; + + t_float a,ainc,f,finc,address; + int D = fft->D; + int I = D; + int L = fft->L; + t_float synt = fft->synt; + t_float P = fft->P; + int R = fft->R; + int N2 = fft->N2; + t_float Iinv = 1./fft->D; + t_float pitch_increment = fft->pitch_increment; + t_float *table = fft->table; + t_float *lastamp = fft->lastamp ; + t_float *lastfreq = fft->lastfreq ; + t_float *bindex = fft->bindex; + t_float *channel = fft->channel; + t_float *output = fft->output; + int hi_bin = fft->hi_bin; + int lo_bin = fft->lo_bin; + t_float maxamp = 0.0; + t_float localthresh, testamp; + short noalias = fft->noalias; + t_float nyquist = fft->nyquist; + int oscnt = 0; +#ifdef PARANOID + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } +#endif + + if(R == 0){ + post("FFTeaseLib: limited oscbank got 0 SR"); + return; + } + + if(lo_bin < 0 || hi_bin > N2){ + post("FFTeaseLib: limited oscbank: bad bins: %d %d",lo_bin,hi_bin); + } + + pitch_increment = P * (t_float) L / (t_float) R; + + if( synt > 0.0 ){ + maxamp = 0.0; + for ( chan = lo_bin; chan < hi_bin; chan++ ){ + amp = chan << 1; + testamp = fabs( channel[amp] ); + if( testamp > maxamp ) + maxamp = testamp; + } + } + if(maxamp > framethresh){ + localthresh = synt * maxamp; + } else { + localthresh = synt * framethresh; // watch this line! + } + + + for ( chan = lo_bin; chan < hi_bin; chan++ ) { +#ifdef PARANOID + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } +#endif + freq = ( amp = ( chan << 1 ) ) + 1; + if(noalias){ + if( channel[freq] * P >= nyquist ) + channel[amp] = 0; + } + if ( channel[amp] > localthresh ){ + ++oscnt; +#ifdef PARANOID + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } +#endif + if(oscnt > osclimit){ + goto exit; + } + channel[freq] *= pitch_increment; + finc = ( channel[freq] - ( f = lastfreq[chan] ) )*Iinv; + ainc = ( channel[amp] - ( a = lastamp[chan] ) )*Iinv; + address = bindex[chan]; + // this was the bug - somewhere bindex was not properly initialized! + //i_address = (int) address; + if( address < 0 || address >= L){ + address = 0; + // post("limited oscbank: bad address"); + } + for ( n = 0; n < I; n++ ) { +#ifdef PARANOID + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } +#endif +// this is a suspected bug line: + /* + iAddress = (int) address; + if( iAddress == L ){ + iAddress = L - 1; + } + + + if( iAddress < 0 || iAddress >= L ){ + post("limited oscbank: bad address: %d", iAddress); + } else { + output[n] += a*table[ iAddress ]; + } + */ + // skip excessive paranoia for efficiency + output[n] += a*table[ (int) address ]; // this WILL go to L, so tab needs a guardpoint + address += f; + while ( address >= L ) + address -= L; + while ( address < 0 ) + address += L; + a += ainc; + f += finc; + } + lastfreq[chan] = channel[freq]; + lastamp[chan] = channel[amp]; + bindex[chan] = address; + } + } + exit:; +} \ No newline at end of file diff --git a/externals/fftease/lyonpotpourri-meta.pd b/externals/fftease/lyonpotpourri-meta.pd new file mode 100644 index 000000000..55430cf84 --- /dev/null +++ b/externals/fftease/lyonpotpourri-meta.pd @@ -0,0 +1,7 @@ +#N canvas 15 49 200 200 10; +#N canvas 25 49 420 300 META 1; +#X text 13 41 NAME lyonpotpourri; +#X text 10 25 AUTHOR Eric Lyon <e.lyon@qub.ac.uk>; +#X text 10 10 VERSION 2.0; +#X text 10 60 LICENSE MIT; +#X restore 10 10 pd META; diff --git a/externals/fftease/m_pd.h b/externals/fftease/m_pd.h new file mode 100644 index 000000000..f3af68974 --- /dev/null +++ b/externals/fftease/m_pd.h @@ -0,0 +1,634 @@ +/* Copyright (c) 1997-1999 Miller Puckette. +* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ + +#ifndef __m_pd_h_ + +#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) +extern "C" { +#endif + +#define PD_MAJOR_VERSION 0 +#define PD_MINOR_VERSION 38 + +/* old name for "MSW" flag -- we have to take it for the sake of many old +"nmakefiles" for externs, which will define NT and not MSW */ +#if defined(NT) && !defined(MSW) +#define MSW +#endif + +#ifdef MSW +// #pragma warning( disable : 4091 ) +#pragma warning( disable : 4305 ) /* uncast const double to float */ +#pragma warning( disable : 4244 ) /* uncast float/int conversion etc. */ +#pragma warning( disable : 4101 ) /* unused automatic variables */ +#endif /* MSW */ + + /* the external storage class is "extern" in UNIX; in MSW it's ugly. */ +#ifdef MSW +#ifdef PD_INTERNAL +#define EXTERN __declspec(dllexport) extern +#else +#define EXTERN __declspec(dllimport) extern +#endif /* PD_INTERNAL */ +#else +#define EXTERN extern +#endif /* MSW */ + + /* and depending on the compiler, hidden data structures are + declared differently: */ +#if defined( __GNUC__) || defined( __BORLANDC__ ) || defined( __MWERKS__ ) +#define EXTERN_STRUCT struct +#else +#define EXTERN_STRUCT extern struct +#endif + + +#if !defined(_SIZE_T) && !defined(_SIZE_T_) +#include <stddef.h> /* just for size_t -- how lame! */ +#endif + +#define MAXPDSTRING 1000 /* use this for anything you want */ +#define MAXPDARG 5 /* max number of args we can typecheck today */ + +/* signed and unsigned integer types the size of a pointer: */ +/* GG: long is the size of a pointer */ +typedef long t_int; + +typedef float t_float; /* a floating-point number at most the same size */ +typedef float t_floatarg; /* floating-point type for function calls */ + +typedef struct _symbol +{ + char *s_name; + struct _class **s_thing; + struct _symbol *s_next; +} t_symbol; + +EXTERN_STRUCT _array; +#define t_array struct _array /* g_canvas.h */ + +/* pointers to glist and array elements go through a "stub" which sticks +around after the glist or array is freed. The stub itself is deleted when +both the glist/array is gone and the refcount is zero, ensuring that no +gpointers are pointing here. */ + +#define GP_NONE 0 /* the stub points nowhere (has been cut off) */ +#define GP_GLIST 1 /* the stub points to a glist element */ +#define GP_ARRAY 2 /* ... or array */ + +typedef struct _gstub +{ + union + { + struct _glist *gs_glist; /* glist we're in */ + struct _array *gs_array; /* array we're in */ + } gs_un; + int gs_which; /* GP_GLIST/GP_ARRAY */ + int gs_refcount; /* number of gpointers pointing here */ +} t_gstub; + +typedef struct _gpointer /* pointer to a gobj in a glist */ +{ + union + { + struct _scalar *gp_scalar; /* scalar we're in (if glist) */ + union word *gp_w; /* raw data (if array) */ + } gp_un; + int gp_valid; /* number which must match gpointee */ + t_gstub *gp_stub; /* stub which points to glist/array */ +} t_gpointer; + +typedef union word +{ + t_float w_float; + t_symbol *w_symbol; + t_gpointer *w_gpointer; + t_array *w_array; + struct _glist *w_list; + int w_index; +} t_word; + +typedef enum +{ + A_NULL, + A_FLOAT, + A_SYMBOL, + A_POINTER, + A_SEMI, + A_COMMA, + A_DEFFLOAT, + A_DEFSYM, + A_DOLLAR, + A_DOLLSYM, + A_GIMME, + A_CANT +} t_atomtype; + +#define A_DEFSYMBOL A_DEFSYM /* better name for this */ + +typedef struct _atom +{ + t_atomtype a_type; + union word a_w; +} t_atom; + +EXTERN_STRUCT _class; +#define t_class struct _class + +EXTERN_STRUCT _outlet; +#define t_outlet struct _outlet + +EXTERN_STRUCT _inlet; +#define t_inlet struct _inlet + +EXTERN_STRUCT _binbuf; +#define t_binbuf struct _binbuf + +EXTERN_STRUCT _clock; +#define t_clock struct _clock + +EXTERN_STRUCT _outconnect; +#define t_outconnect struct _outconnect + +EXTERN_STRUCT _glist; +#define t_glist struct _glist +#define t_canvas struct _glist /* LATER lose this */ + +typedef t_class *t_pd; /* pure datum: nothing but a class pointer */ + +typedef struct _gobj /* a graphical object */ +{ + t_pd g_pd; /* pure datum header (class) */ + struct _gobj *g_next; /* next in list */ +} t_gobj; + +typedef struct _scalar /* a graphical object holding data */ +{ + t_gobj sc_gobj; /* header for graphical object */ + t_symbol *sc_template; /* template name (LATER replace with pointer) */ + t_word sc_vec[1]; /* indeterminate-length array of words */ +} t_scalar; + +typedef struct _text /* patchable object - graphical, with text */ +{ + t_gobj te_g; /* header for graphical object */ + t_binbuf *te_binbuf; /* holder for the text */ + t_outlet *te_outlet; /* linked list of outlets */ + t_inlet *te_inlet; /* linked list of inlets */ + short te_xpix; /* x&y location (within the toplevel) */ + short te_ypix; + short te_width; /* requested width in chars, 0 if auto */ + unsigned int te_type:2; /* from defs below */ +} t_text; + +#define T_TEXT 0 /* just a textual comment */ +#define T_OBJECT 1 /* a MAX style patchable object */ +#define T_MESSAGE 2 /* a MAX stype message */ +#define T_ATOM 3 /* a cell to display a number or symbol */ + +#define te_pd te_g.g_pd + + /* t_object is synonym for t_text (LATER unify them) */ + +typedef struct _text t_object; + +#define ob_outlet te_outlet +#define ob_inlet te_inlet +#define ob_binbuf te_binbuf +#define ob_pd te_g.g_pd +#define ob_g te_g + +typedef void (*t_method)(void); +typedef void *(*t_newmethod)( void); +typedef void (*t_gotfn)(void *x, ...); + +/* ---------------- pre-defined objects and symbols --------------*/ +EXTERN t_pd pd_objectmaker; /* factory for creating "object" boxes */ +EXTERN t_pd pd_canvasmaker; /* factory for creating canvases */ +EXTERN t_symbol s_pointer; +EXTERN t_symbol s_float; +EXTERN t_symbol s_symbol; +EXTERN t_symbol s_bang; +EXTERN t_symbol s_list; +EXTERN t_symbol s_anything; +EXTERN t_symbol s_signal; +EXTERN t_symbol s__N; +EXTERN t_symbol s__X; +EXTERN t_symbol s_x; +EXTERN t_symbol s_y; +EXTERN t_symbol s_; + +/* --------- prototypes from the central message system ----------- */ +EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv); +EXTERN t_symbol *gensym(char *s); +EXTERN t_gotfn getfn(t_pd *x, t_symbol *s); +EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s); +EXTERN void nullfn(void); +EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...); +#define mess0(x, s) ((*getfn((x), (s)))((x))) +#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a))) +#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b))) +#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c))) +#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d))) +#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e))) +EXTERN void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv); +EXTERN t_pd *pd_newest(void); + +/* --------------- memory management -------------------- */ +EXTERN void *getbytes(size_t nbytes); +EXTERN void *getzbytes(size_t nbytes); +EXTERN void *copybytes(void *src, size_t nbytes); +EXTERN void freebytes(void *x, size_t nbytes); +EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize); + +/* -------------------- atoms ----------------------------- */ + +#define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0) +#define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0) +#define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \ + (atom)->a_w.w_gpointer = (gp)) +#define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f)) +#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \ + (atom)->a_w.w_symbol = (s)) +#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \ + (atom)->a_w.w_index = (n)) +#define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \ + (atom)->a_w.w_symbol= (s)) + +EXTERN t_float atom_getfloat(t_atom *a); +EXTERN t_int atom_getint(t_atom *a); +EXTERN t_symbol *atom_getsymbol(t_atom *a); +EXTERN t_symbol *atom_gensym(t_atom *a); +EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv); +EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv); +EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv); + +EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize); + +/* ------------------ binbufs --------------- */ + +EXTERN t_binbuf *binbuf_new(void); +EXTERN void binbuf_free(t_binbuf *x); +EXTERN t_binbuf *binbuf_duplicate(t_binbuf *y); + +EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size); +EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp); +EXTERN void binbuf_clear(t_binbuf *x); +EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv); +EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...); +EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y); +EXTERN void binbuf_addsemi(t_binbuf *x); +EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv); +EXTERN void binbuf_print(t_binbuf *x); +EXTERN int binbuf_getnatom(t_binbuf *x); +EXTERN t_atom *binbuf_getvec(t_binbuf *x); +EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv); +EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname, + int crflag); +EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname, + int crflag); +EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir, + int crflag); +EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir); +EXTERN t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, + int tonew); + +/* ------------------ clocks --------------- */ + +EXTERN t_clock *clock_new(void *owner, t_method fn); +EXTERN void clock_set(t_clock *x, double systime); +EXTERN void clock_delay(t_clock *x, double delaytime); +EXTERN void clock_unset(t_clock *x); +EXTERN double clock_getlogicaltime(void); +EXTERN double clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */ +EXTERN double clock_gettimesince(double prevsystime); +EXTERN double clock_getsystimeafter(double delaytime); +EXTERN void clock_free(t_clock *x); + +/* ----------------- pure data ---------------- */ +EXTERN t_pd *pd_new(t_class *cls); +EXTERN void pd_free(t_pd *x); +EXTERN void pd_bind(t_pd *x, t_symbol *s); +EXTERN void pd_unbind(t_pd *x, t_symbol *s); +EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c); +EXTERN void pd_pushsym(t_pd *x); +EXTERN void pd_popsym(t_pd *x); +EXTERN t_symbol *pd_getfilename(void); +EXTERN t_symbol *pd_getdirname(void); +EXTERN void pd_bang(t_pd *x); +EXTERN void pd_pointer(t_pd *x, t_gpointer *gp); +EXTERN void pd_float(t_pd *x, t_float f); +EXTERN void pd_symbol(t_pd *x, t_symbol *s); +EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv); +#define pd_class(x) (*(x)) + +/* ----------------- pointers ---------------- */ +EXTERN void gpointer_init(t_gpointer *gp); +EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto); +EXTERN void gpointer_unset(t_gpointer *gp); +EXTERN int gpointer_check(const t_gpointer *gp, int headok); + +/* ----------------- patchable "objects" -------------- */ +EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1, + t_symbol *s2); +EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp); +EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp); +EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp); +EXTERN void inlet_free(t_inlet *x); + +EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s); +EXTERN void outlet_bang(t_outlet *x); +EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp); +EXTERN void outlet_float(t_outlet *x, t_float f); +EXTERN void outlet_symbol(t_outlet *x, t_symbol *s); +EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv); +EXTERN t_symbol *outlet_getsymbol(t_outlet *x); +EXTERN void outlet_free(t_outlet *x); +EXTERN t_object *pd_checkobject(t_pd *x); + + +/* -------------------- canvases -------------- */ + +EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir); + +EXTERN void canvas_setargs(int argc, t_atom *argv); +EXTERN void canvas_getargs(int *argcp, t_atom **argvp); +EXTERN t_symbol *canvas_getcurrentdir(void); +EXTERN t_glist *canvas_getcurrent(void); +EXTERN void canvas_makefilename(t_glist *c, char *file, + char *result,int resultsize); +EXTERN t_symbol *canvas_getdir(t_glist *x); +EXTERN int sys_fontwidth(int fontsize); +EXTERN int sys_fontheight(int fontsize); +EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b); + +/* ---------------- widget behaviors ---------------------- */ + +EXTERN_STRUCT _widgetbehavior; +#define t_widgetbehavior struct _widgetbehavior + +EXTERN_STRUCT _parentwidgetbehavior; +#define t_parentwidgetbehavior struct _parentwidgetbehavior +EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x); + +/* -------------------- classes -------------- */ + +#define CLASS_DEFAULT 0 /* flags for new classes below */ +#define CLASS_PD 1 +#define CLASS_GOBJ 2 +#define CLASS_PATCHABLE 3 +#define CLASS_NOINLET 8 + +#define CLASS_TYPEMASK 3 + + +EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod, + t_method freemethod, size_t size, int flags, t_atomtype arg1, ...); +EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s, + t_atomtype type1, ...); +EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel, + t_atomtype arg1, ...); +EXTERN void class_addbang(t_class *c, t_method fn); +EXTERN void class_addpointer(t_class *c, t_method fn); +EXTERN void class_doaddfloat(t_class *c, t_method fn); +EXTERN void class_addsymbol(t_class *c, t_method fn); +EXTERN void class_addlist(t_class *c, t_method fn); +EXTERN void class_addanything(t_class *c, t_method fn); +EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s); +EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w); +EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w); +EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c); +EXTERN char *class_getname(t_class *c); +EXTERN char *class_gethelpname(t_class *c); +EXTERN void class_setdrawcommand(t_class *c); +EXTERN int class_isdrawcommand(t_class *c); +EXTERN void class_domainsignalin(t_class *c, int onset); +#define CLASS_MAINSIGNALIN(c, type, field) \ + class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0) + + /* prototype for functions to save Pd's to a binbuf */ +typedef void (*t_savefn)(t_gobj *x, t_binbuf *b); +EXTERN void class_setsavefn(t_class *c, t_savefn f); +EXTERN t_savefn class_getsavefn(t_class *c); + /* prototype for functions to open properties dialogs */ +typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist); +EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f); +EXTERN t_propertiesfn class_getpropertiesfn(t_class *c); + +#ifndef PD_CLASS_DEF +#define class_addbang(x, y) class_addbang((x), (t_method)(y)) +#define class_addpointer(x, y) class_addpointer((x), (t_method)(y)) +#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y)) +#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y)) +#define class_addlist(x, y) class_addlist((x), (t_method)(y)) +#define class_addanything(x, y) class_addanything((x), (t_method)(y)) +#endif + +/* ------------ printing --------------------------------- */ +EXTERN void post(const char *fmt, ...); +EXTERN void startpost(const char *fmt, ...); +EXTERN void poststring(const char *s); +EXTERN void postfloat(float f); +EXTERN void postatom(int argc, t_atom *argv); +EXTERN void endpost(void); +EXTERN void error(const char *fmt, ...); +EXTERN void bug(const char *fmt, ...); +EXTERN void pd_error(void *object, const char *fmt, ...); +EXTERN void sys_logerror(const char *object, const char *s); +EXTERN void sys_unixerror(const char *object); +EXTERN void sys_ouch(void); + + +/* ------------ system interface routines ------------------- */ +EXTERN int sys_isreadablefile(const char *name); +EXTERN void sys_bashfilename(const char *from, char *to); +EXTERN void sys_unbashfilename(const char *from, char *to); +EXTERN int open_via_path(const char *name, const char *ext, const char *dir, + char *dirresult, char **nameresult, unsigned int size, int bin); +EXTERN int sched_geteventno(void); +EXTERN double sys_getrealtime(void); + + +/* ------------ threading ------------------- */ +/* T.Grill - see m_sched.c */ + +EXTERN void sys_lock(void); +EXTERN void sys_unlock(void); +EXTERN int sys_trylock(void); + + +/* --------------- signals ----------------------------------- */ + +typedef float t_sample; +#define MAXLOGSIG 32 +#define MAXSIGSIZE (1 << MAXLOGSIG) + +typedef struct _signal +{ + int s_n; /* number of points in the array */ + t_sample *s_vec; /* the array */ + float s_sr; /* sample rate */ + int s_refcount; /* number of times used */ + int s_isborrowed; /* whether we're going to borrow our array */ + struct _signal *s_borrowedfrom; /* signal to borrow it from */ + struct _signal *s_nextfree; /* next in freelist */ + struct _signal *s_nextused; /* next in used list */ +} t_signal; + + +typedef t_int *(*t_perfroutine)(t_int *args); + +EXTERN t_int *plus_perform(t_int *args); +EXTERN t_int *zero_perform(t_int *args); +EXTERN t_int *copy_perform(t_int *args); + +EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n); +EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n); +EXTERN void dsp_add_scalarcopy(t_sample *in, t_sample *out, int n); +EXTERN void dsp_add_zero(t_sample *out, int n); + +EXTERN int sys_getblksize(void); +EXTERN float sys_getsr(void); +EXTERN int sys_get_inchannels(void); +EXTERN int sys_get_outchannels(void); + +EXTERN void dsp_add(t_perfroutine f, int n, ...); +EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec); +EXTERN void pd_fft(float *buf, int npoints, int inverse); +EXTERN int ilog2(int n); + +EXTERN void mayer_fht(float *fz, int n); +EXTERN void mayer_fft(int n, float *real, float *imag); +EXTERN void mayer_ifft(int n, float *real, float *imag); +EXTERN void mayer_realfft(int n, float *real); +EXTERN void mayer_realifft(int n, float *real); + +EXTERN float *cos_table; +#define LOGCOSTABSIZE 9 +#define COSTABSIZE (1<<LOGCOSTABSIZE) + +EXTERN int canvas_suspend_dsp(void); +EXTERN void canvas_resume_dsp(int oldstate); +EXTERN void canvas_update_dsp(void); + +/* IOhannes { (up/downsampling) */ +typedef struct _resample +{ + int method; /* up/downsampling method ID */ + + t_int downsample; /* downsampling factor */ + t_int upsample; /* upsampling factor */ + + t_float *s_vec; /* here we hold the resampled data */ + int s_n; + + t_float *coeffs; /* coefficients for filtering... */ + int coefsize; + + t_float *buffer; /* buffer for filtering */ + int bufsize; +} t_resample; + +EXTERN void resample_init(t_resample *x); +EXTERN void resample_free(t_resample *x); + +EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method); +EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method); +EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method); +/* } IOhannes */ + +/* ----------------------- utility functions for signals -------------- */ +EXTERN float mtof(float); +EXTERN float ftom(float); +EXTERN float rmstodb(float); +EXTERN float powtodb(float); +EXTERN float dbtorms(float); +EXTERN float dbtopow(float); + +EXTERN float q8_sqrt(float); +EXTERN float q8_rsqrt(float); +#ifndef N32 +EXTERN float qsqrt(float); /* old names kept for extern compatibility */ +EXTERN float qrsqrt(float); +#endif +/* --------------------- data --------------------------------- */ + + /* graphical arrays */ +EXTERN_STRUCT _garray; +#define t_garray struct _garray + +EXTERN t_class *garray_class; +EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec); +EXTERN float garray_get(t_garray *x, t_symbol *s, t_int indx); +EXTERN void garray_redraw(t_garray *x); +EXTERN int garray_npoints(t_garray *x); +EXTERN char *garray_vec(t_garray *x); +EXTERN void garray_resize(t_garray *x, t_floatarg f); +EXTERN void garray_usedindsp(t_garray *x); +EXTERN void garray_setsaveit(t_garray *x, int saveit); +EXTERN t_class *scalar_class; + +EXTERN t_float *value_get(t_symbol *s); +EXTERN void value_release(t_symbol *s); +EXTERN int value_getfloat(t_symbol *s, t_float *f); +EXTERN int value_setfloat(t_symbol *s, t_float f); + +/* ------- GUI interface - functions to send strings to TK --------- */ +typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist); + +EXTERN void sys_vgui(char *fmt, ...); +EXTERN void sys_gui(char *s); +EXTERN void sys_pretendguibytes(int n); +EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f); +EXTERN void sys_unqueuegui(void *client); + /* dialog window creation and destruction */ +EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd); +EXTERN void gfxstub_deleteforkey(void *key); + +extern t_class *glob_pdobject; /* object to send "pd" messages */ + +/*------------- Max 0.26 compatibility --------------------*/ + +/* the following reflects the new way classes are laid out, with the class + pointing to the messlist and not vice versa. Externs shouldn't feel it. */ +typedef t_class *t_externclass; + +EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine, + t_method freeroutine, t_symbol *name, size_t size, int tiny, \ + t_atomtype arg1, ...); +EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...); + +#define t_getbytes getbytes +#define t_freebytes freebytes +#define t_resizebytes resizebytes +#define typedmess pd_typedmess +#define vmess pd_vmess + +/* A definition to help gui objects straddle 0.34-0.35 changes. If this is +defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */ + +#define PD_USE_TE_XPIX + + +#ifdef __i386__ +/* a test for NANs and denormals. Should only be necessary on i386. */ +#define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \ + (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000)) +/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */ +#define PD_BIGORSMALL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \ + (((*(unsigned int*)&(f))&0x60000000)==0x60000000)) +#else +#define PD_BADFLOAT(f) 0 +#define PD_BIGORSMALL(f) 0 +#endif + +#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) +} +#endif + +#define __m_pd_h_ +#endif /* __m_pd_h_ */ diff --git a/externals/fftease/makewindows.c b/externals/fftease/makewindows.c new file mode 100644 index 000000000..9c71e84ed --- /dev/null +++ b/externals/fftease/makewindows.c @@ -0,0 +1,137 @@ +#include "fftease.h" + +void fftease_makewindows( t_float *H, t_float *A, t_float *S, int Nw, int N, int I ) + +{ + int i ; + t_float sum ; + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ; + + if ( Nw > N ) { + t_float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + t_float afac = 2./sum ; + t_float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} + +void fftease_makehamming( t_float *H, t_float *A, t_float *S, int Nw, int N, int I, int odd ) + +{ + int i; + t_float sum ; + + + + if (odd) { + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) )); + } + + else { + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ); + + } + + if ( Nw > N ) { + t_float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + t_float afac = 2./sum ; + t_float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} + + +void fftease_makehanning( t_float *H, t_float *A, t_float *S, int Nw, int N, int I, int odd ) +{ + int i; + t_float sum ; + + + if (odd) { + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); + } + + else { + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); + + } + + if ( Nw > N ) { + t_float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + t_float afac = 2./sum ; + t_float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} diff --git a/externals/fftease/mindwarp~.c b/externals/fftease/mindwarp~.c new file mode 100644 index 000000000..a215ab812 --- /dev/null +++ b/externals/fftease/mindwarp~.c @@ -0,0 +1,383 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *mindwarp_class; + +#define OBJECT_NAME "mindwarp~" + +#define MAX_WARP 16.0 + +typedef struct _mindwarp +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float warpFactor; + t_float shapeWidth; + t_float *newChannel; + t_float *newAmplitudes; + short mute; +} t_mindwarp; + +void mindwarp_dsp(t_mindwarp *x, t_signal **sp); +t_int *mindwarp_perform(t_int *w); +void *mindwarp_new(t_symbol *s, int argc, t_atom *argv); +void mindwarp_dest(t_mindwarp *x, t_float f); +void mindwarp_init(t_mindwarp *x); +void mindwarp_free(t_mindwarp *x); +void mindwarp_mute(t_mindwarp *x, t_floatarg toggle); + +void mindwarp_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("mindwarp~"), (t_newmethod)mindwarp_new, + (t_method)mindwarp_free,sizeof(t_mindwarp), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_mindwarp, x_f); + class_addmethod(c,(t_method)mindwarp_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)mindwarp_mute,gensym("mute"),A_FLOAT,0); + mindwarp_class = c; + fftease_announce(OBJECT_NAME); +} + +void *mindwarp_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_mindwarp *x = (t_mindwarp *)pd_new(mindwarp_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + + /* args: warpfactor, shape width, overlap, window factor */ + + x->warpFactor = 1.0; + x->shapeWidth = 3.0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; + +} + +void mindwarp_init(t_mindwarp *x) +{ + short initialized = x->fft->initialized; + + fftease_init(x->fft); + + if(!initialized){ + x->mute = 0; + x->newAmplitudes = (t_float *)calloc(((x->fft->N2 + 1) * 16), sizeof(t_float)); + x->newChannel = (t_float *)calloc ((x->fft->N + 1), sizeof(t_float)); + } + else if(initialized == 1) { + x->newAmplitudes = (t_float *)realloc(x->newAmplitudes, ((x->fft->N2 + 1) * 16) * sizeof(float)); + x->newChannel = (t_float *)realloc(x->newChannel, (x->fft->N + 1) * sizeof(t_float)); + } +} + +void mindwarp_free(t_mindwarp *x) +{ + short initialized = x->fft->initialized; + fftease_free(x->fft); + free(x->fft); + if(initialized){ + free(x->newAmplitudes); + free(x->newChannel); + } +} + +void do_mindwarp(t_mindwarp *x) +{ + t_float *newChannel = x->newChannel; + + int + i,j, + bindex, + N, + N2, + Nw, + shapeWidth = (int) x->shapeWidth, + remainingWidth, + newLength; +float + cutoff, + filterMult, + interpIncr, + interpPhase; + t_float warpFactor; + t_fftease *fft = x->fft; + t_float *newAmplitudes = x->newAmplitudes; + t_float *channelOne = fft->channel; + + N = fft->N; + N2 = fft->N2; + Nw = fft->Nw; + warpFactor = x->warpFactor; + cutoff = (t_float) N2 * .9; + filterMult = .00001; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_leanconvert(fft); + + if(warpFactor <= 0){ + error("bad warp, resetting"); + warpFactor = 1.0; + } + + newLength = (int) ((t_float) N2 / warpFactor); + + if(newLength <= 0){ + error("bad length: resetting"); + newLength = 1.0; + } + + interpIncr = (t_float) N2 / (t_float) newLength; + + interpPhase = 0.; + + + // do simple linear interpolation on magnitudes + + for ( bindex=0; bindex < newLength; bindex++ ) { + + int localbindex = ((int) interpPhase) << 1; + + t_float lower = *(channelOne + localbindex), + upper = *(channelOne + localbindex + 2), + diff = interpPhase - ( (t_float) ( (int) interpPhase ) ); + + *(newAmplitudes+bindex) = lower + ( ( upper - lower ) * diff ); + + interpPhase += interpIncr; + } + + + + // replace magnitudes with warped values + + if (warpFactor > 1.) { + + int until = (int) ( cutoff / warpFactor ); + + for ( bindex=0; bindex < until; bindex++ ) { + register int amp = bindex<<1; + + *(newChannel+amp) = *(newAmplitudes+bindex); + } + + + // filter remaining spectrum as spectral envelope has shrunk + + for ( bindex=until; bindex < N2; bindex++ ) { + register int amp = bindex<<1; + + *(newChannel+amp) *= filterMult; + } + } + + + //OK + + // spectral envelope has enlarged, no post filtering is necessary + + else { + + for ( bindex=0; bindex <= N2; bindex++ ) { + register int amp = bindex<<1; + + *(newChannel+amp) = *(newAmplitudes+bindex); + } + } + + + + // constrain our shapeWidth value + + if ( shapeWidth > N2 ) + shapeWidth = N2; + + if ( shapeWidth < 1 ) + shapeWidth = 1; + + // lets just shape the entire signal by the shape width + + + for ( i=0; i < N; i += shapeWidth << 1 ) { + + t_float amplSum = 0., + freqSum = 0., + factor = 1.0; + + for ( j = 0; j < shapeWidth << 1; j += 2 ) { + + amplSum += *(newChannel+i+j); + freqSum += *(channelOne+i+j); + } + + if (amplSum < 0.000000001) + factor = 0.000000001; + + // this can happen, crashing external; now fixed. + + if( freqSum <= 0 ){ + // error("bad freq sum, resetting"); + freqSum = 1.0; + } + else + factor = amplSum / freqSum; + + for ( j = 0; j < shapeWidth << 1; j += 2 ) + *(channelOne+i+j) *= factor; + } + + // copy remaining magnitudes (fixed shadowed variable warning by renaming bindex) + + if ( (remainingWidth = N2 % shapeWidth) ) { + + int lbindex = (N2 - remainingWidth) << 1; + + + t_float amplSum = 0., + freqSum = 0., + factor; + + for ( j = 0; j < remainingWidth << 1; j += 2 ) { + + amplSum += *(newChannel+lbindex+j); + freqSum += *(channelOne+lbindex+j); + } + + if (amplSum < 0.000000001) + factor = 0.000000001; + + else + factor = amplSum / freqSum; + + for ( j = 0; j < remainingWidth << 1; j += 2 ) + *(channelOne+bindex+j) *= factor; + } + + fftease_leanunconvert(fft); + + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + +} + + +t_int *mindwarp_perform(t_int *w) +{ + t_mindwarp *x = (t_mindwarp *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *vec_warpFactor = (t_float *)(w[3]); + t_float *vec_shapeWidth = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + + int i, j; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + t_float *input = fft->input; + t_float *output = fft->output; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + x->warpFactor = *vec_warpFactor; + x->shapeWidth = *vec_shapeWidth; + + if(x->warpFactor <= 0.0){ + x->warpFactor = 0.1; + error("%s: zero warp factor is illegal",OBJECT_NAME); + } + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_mindwarp(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_mindwarp(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_mindwarp(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void mindwarp_mute(t_mindwarp *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void mindwarp_dsp(t_mindwarp *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + mindwarp_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(mindwarp_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} + diff --git a/externals/fftease/morphine~.c b/externals/fftease/morphine~.c new file mode 100644 index 000000000..8e5be29cf --- /dev/null +++ b/externals/fftease/morphine~.c @@ -0,0 +1,392 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" +/* + This external links to qsortE, so unlike others in this collection, morphine~ is covered under the GNU GPL. + */ +static t_class *morphine_class; + +#define OBJECT_NAME "morphine~" + +typedef struct _pickme { + + int bin; + float value; + +} pickme; + + +typedef struct _morphine +{ + + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_fftease *fft2; + pickme *picks; + pickme *mirror; + t_float morphIndex; + t_float exponScale; + short mute; +} t_morphine; + +void morphine_dsp(t_morphine *x, t_signal **sp); +t_int *morphine_perform(t_int *w); +void *morphine_new(t_symbol *s, int argc, t_atom *argv); +int sortIncreasing( const void *a, const void *b ); +int qsortE (char *base_ptr, int total_elems, int size, int (*cmp)(const void *a, const void *b)); +void morphine_transition(t_morphine *x, t_floatarg f); +void morphine_free(t_morphine *x); +void morphine_mute(t_morphine *x, t_floatarg toggle); +void morphine_tilde_setup(void); +void morphine_init(t_morphine *x); + +int sortIncreasing( const void *a, const void *b ) +{ + + if ( ((pickme *) a)->value > ((pickme *) b)->value ) + return 1; + + if ( ((pickme *) a)->value < ((pickme *) b)->value ) + return -1; + + return 0; +} + +void morphine_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("morphine~"), (t_newmethod)morphine_new, + (t_method)morphine_free,sizeof(t_morphine), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_morphine, x_f); + class_addmethod(c,(t_method)morphine_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)morphine_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)morphine_transition,gensym("transition"), A_FLOAT, 0); + morphine_class = c; + fftease_announce(OBJECT_NAME); +} + +void morphine_transition(t_morphine *x, t_floatarg f) +{ + x->exponScale = f; +} + +void *morphine_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_morphine *x = (t_morphine *)pd_new(morphine_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + x->exponScale = -5.0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void morphine_init(t_morphine *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->morphIndex = 0.; + x->mute = 0; + x->picks = (pickme *) calloc((fft->N2+1), sizeof(pickme)); + x->mirror = (pickme *) calloc((fft->N2+1), sizeof(pickme)); + } else if(x->fft->initialized == 1) { + x->picks = (pickme *) realloc(x->picks, (fft->N2+1) * sizeof(pickme)); + x->mirror = (pickme *) realloc(x->mirror, (fft->N2+1) * sizeof(pickme)); + } +} + +void do_morphine(t_morphine *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int lookupIndex,even, odd; + t_float mult, + morphIndex, + exponScale, + a1, b1, + a2, b2; + + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + t_float *channelOne = fft->channel; + t_float *channelTwo = fft2->channel; + int N2 = fft->N2; + pickme *picks = x->picks; + pickme *mirror = x->mirror; + mult = fft->mult; + morphIndex = x->morphIndex; + exponScale = x->exponScale; + + fftease_fold(fft); + fftease_fold(fft2); + + /* do an fft */ + + fftease_rdft(fft,1); + fftease_rdft(fft2,1); + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + + + /* find amplitude differences between home and visitors */ + + (picks+i)->value = fabs( *(channelOne+even) - + *(channelTwo+even) ); + (picks+i)->bin = i; + } + + /* sort our differences in ascending order */ + + + qsortE( (char *) picks, (int) N2+1, (int) sizeof(pickme), + sortIncreasing ); + + /* now we create an effective mirror of the sorted distribution. + we will assure that the initial transition will be made from + small spectral differences (when the sort behavior is increasing) + and the ending transition will also be made from small spectral + differences */ + + for ( i=0; i <= N2; i += 2 ) { + (mirror+(i/2))->bin = (picks+i)->bin; + (mirror+(i/2))->value = (picks+i)->value; + } + + for ( i=1; i <= N2; i += 2 ) { + (mirror+(N2-(i/2)))->bin = (picks+i)->bin; + (mirror+(N2-(i/2)))->value = (picks+i)->value; + } + + + /* calculate our morphIndex from an exponential function based on exponScale */ + + if (exponScale == 0.) + lookupIndex = (int) (( (float) N2 ) * morphIndex); + + else { + + if ( morphIndex < .5 ) { + + lookupIndex = (int) ( ((float) N2) * (( + (1. - exp( exponScale * morphIndex * 2. )) / + (1. - exp( exponScale )) ) * .5) ); + } + + else { + + lookupIndex = (int) ( ((float) N2) * ( .5 + + (( (1. - exp( -exponScale * (morphIndex - .5) * 2. )) / + (1. - exp( -exponScale )) ) * .5) ) ); + } + + } + + + // post("%d", lookupIndex); + + /* choose the bins that are least different first */ + + for ( i=0; i <= lookupIndex; i++ ) { + + even = ((mirror+i)->bin)<<1, + odd = (((mirror+i)->bin)<<1) + 1; + + *(channelOne+even) = *(channelTwo+even); + *(channelOne+odd) = *(channelTwo+odd); + } + + /* convert back to complex form, read for the inverse fft */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + + +t_int *morphine_perform(t_int *w) +{ + + int i, j; + t_morphine *x = (t_morphine *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *vec_morphIndex = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + t_float morphIndex = x->morphIndex; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + morphIndex = *vec_morphIndex; + if ( morphIndex < 0 ) + morphIndex = 0.; + else { + if ( morphIndex > 1. ) + morphIndex = 1.; + } + x->morphIndex = morphIndex; + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_morphine(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_morphine(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_morphine(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void morphine_free(t_morphine *x) +{ + if(x->fft->initialized){ + free(x->picks); + free(x->mirror); + } + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void morphine_mute(t_morphine *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void morphine_dsp(t_morphine *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + morphine_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(morphine_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); + } +} + + diff --git a/externals/fftease/multyq~.c b/externals/fftease/multyq~.c new file mode 100644 index 000000000..7a653f60b --- /dev/null +++ b/externals/fftease/multyq~.c @@ -0,0 +1,450 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *multyq_class; + +#define OBJECT_NAME "multyq~" + +typedef struct _multyq +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float cf1; + t_float gainfac1; + t_float bw1; + t_float cf2; + t_float gainfac2; + t_float bw2; + t_float cf3; + t_float gainfac3; + t_float bw3; + t_float cf4; + t_float gainfac4; + t_float bw4; + t_float *rcos; + t_float *filt; + t_float *freqs; + int rcoslen; + short please_update; + short always_update; + short mute; +} t_multyq; + +void multyq_dsp(t_multyq *x, t_signal **sp); +t_int *multyq_perform(t_int *w); +void *multyq_new(t_symbol *s, int argc, t_atom *argv); +void multyq_mute(t_multyq *x, t_floatarg state); +void update_filter_function(t_multyq *x); +void filtyQ( float *S, float *C, float *filtfunc, int N2 ); +void multyq_init(t_multyq *x); +void multyq_free(t_multyq *x); +void multyq_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("multyq~"), (t_newmethod)multyq_new, + (t_method)multyq_free,sizeof(t_multyq), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_multyq, x_f); + class_addmethod(c,(t_method)multyq_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)multyq_mute,gensym("mute"),A_FLOAT,0); + multyq_class = c; + fftease_announce(OBJECT_NAME); +} + +void multyq_free(t_multyq *x) +{ + if(x->fft->initialized){ + free(x->rcos); + free(x->freqs); + free(x->filt); + } + fftease_free(x->fft); + free(x->fft); +} + +void *multyq_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_fftease *fft; + t_multyq *x = (t_multyq *)pd_new(multyq_class); + for(i = 0; i < 12; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->R = sys_getsr(); + fft->MSPVectorSize = sys_getblksize(); + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft->initialized = 0; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void multyq_init(t_multyq *x) +{ + int i; + t_float funda, base; + + t_fftease *fft = x->fft; + short initialized = fft->initialized; + + fftease_init(fft); + + if(!initialized){ + x->please_update = 0; + x->always_update = 0; + x->rcoslen = 8192 ; + x->rcos = (t_float *) calloc(x->rcoslen, sizeof( t_float )); + x->freqs = (t_float *) calloc(fft->N2, sizeof( t_float )); + x->filt = (t_float *) calloc((fft->N2 + 1), sizeof( t_float )); + + x->cf1 = 200.; + x->gainfac1 = 0.0; + x->bw1 = .15; + x->cf2 = 700.; + x->gainfac2 = 0.0; + x->bw2 = .1; + x->cf3 = 3000.; + x->gainfac3 = 0.0; + x->bw3 = .15; + x->cf4 = 12000.; + x->gainfac4 = 0.0; + x->bw4 = .15; + x->mute = 0; + for (i = 0; i < x->rcoslen; i++){ + x->rcos[i] = .5 - .5 * cos(((float)i/(float)x->rcoslen) * TWOPI); + } + } else { + x->freqs = (t_float *) realloc(x->freqs, fft->N2 * sizeof( t_float )); + x->filt = (t_float *) realloc(x->filt, (fft->N2 + 1) * sizeof( t_float )); + } + x->fft->input = (t_float *)realloc(fft->input, fft->Nw * sizeof(t_float)); + x->fft->output = (t_float *)realloc(fft->output, fft->Nw * sizeof(t_float)); + + funda = base = (t_float)fft->R /(t_float)fft->N ; + for(i = 0; i < fft->N2; i++){ + x->freqs[i] = base; + base += funda; + } + update_filter_function(x); +} + +void do_multyq(t_multyq *x) +{ + int real, imag, amp, phase; + t_float a, b; + int i; + t_fftease *fft = x->fft; + t_float *S = fft->buffer; + t_float *C = fft->channel; + t_float *filtfunc = x->filt; + int N2 = fft->N2; + fftease_fold(fft); + fftease_rdft(fft,1); + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? S[1] : S[real] ); + b = ( i == 0 || i == N2 ? 0. : S[imag] ); + C[amp] = hypot( a, b ); + C[amp] *= filtfunc[ i ]; + C[phase] = -atan2( b, a ); + } + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + S[real] = *(C+amp) * cos( *(C+phase) ); + if ( i != N2 ) + S[imag] = -*(C+amp) * sin( *(C+phase) ); + } + fftease_rdft(fft,-1); + fftease_overlapadd(fft); +} + + +t_int *multyq_perform(t_int *w) +{ + int i, j; + t_multyq *x = (t_multyq *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *in2 = (t_float *)(w[3]); + t_float *in3 = (t_float *)(w[4]); + t_float *in4 = (t_float *)(w[5]); + t_float *in5 = (t_float *)(w[6]); + t_float *in6 = (t_float *)(w[7]); + t_float *in7 = (t_float *)(w[8]); + t_float *in8 = (t_float *)(w[9]); + t_float *in9 = (t_float *)(w[10]); + t_float *in10 = (t_float *)(w[11]); + t_float *in11 = (t_float *)(w[12]); + t_float *in12 = (t_float *)(w[13]); + t_float *in13 = (t_float *)(w[14]); + t_float *MSPOutputVector = (t_float *)(w[15]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + x->cf1 = *in2; + x->bw1 = *in3; + x->gainfac1 = *in4; + x->cf2 = *in5; + x->bw2 = *in6; + x->gainfac2 = *in7; + x->cf3 = *in8; + x->bw3 = *in9; + x->gainfac3 = *in10; + x->cf4 = *in11; + x->bw4 = *in12; + x->gainfac4 = *in13; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+16; + } + + update_filter_function(x); + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_multyq(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_multyq(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_multyq(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+16; +} + +void multyq_mute(t_multyq *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void update_filter_function(t_multyq *x) +{ + t_float lo, hi ; + t_float ploc, gainer; + int i; + t_float nyquist = (float)x->fft->R / 2.0; + t_float *filt = x->filt; + t_float *rcos = x->rcos; + t_float *freqs = x->freqs; + int rcoslen = x->rcoslen; + int N2 = x->fft->N2; + + // sanity + if( x->cf1 < 0 ){ + x->cf1 = 0; + } + else if( x->cf1 > nyquist){ + x->cf1 = nyquist ; + } + if( x->bw1 <= .05 ){ + x->bw1 = .05; + } + else if( x->bw1 > 1. ){ + x->bw1 = 1.; + } + if( x->gainfac1 < -1. ){ + x->gainfac1 = -1; + } + if( x->cf2 < 0 ){ + x->cf2 = 0; + } + else if( x->cf2> nyquist){ + x->cf2 = nyquist ; + } + if( x->bw2 <= .05 ){ + x->bw2 = .05; + } + else if( x->bw2 > 1. ){ + x->bw2 = 1.; + } + if( x->gainfac2 < -1. ){ + x->gainfac2 = -1; + } + if( x->cf3 < 0 ){ + x->cf3 = 0; + } + else if( x->cf3 > nyquist){ + x->cf3 = nyquist ; + } + if( x->bw3 <= .05 ){ + x->bw3 = .05; + } + else if( x->bw3 > 1. ){ + x->bw3 = 1.; + } + if( x->gainfac3 < -1. ){ + x->gainfac3 = -1; + } + if( x->cf4 < 0 ){ + x->cf4 = 0; + } + else if( x->cf4 > nyquist){ + x->cf4 = nyquist ; + } + if( x->bw4 <= .05 ){ + x->bw4 = .05; + } + else if( x->bw4 > 1. ){ + x->bw4 = 1.; + } + if( x->gainfac4 < -1. ){ + x->gainfac4 = -1; + } + for( i = 0; i < N2; i++ ) { + x->filt[i] = 1.0 ; + } + // filt 1 + lo = x->cf1 * (1.0 - x->bw1 ); + hi = x->cf1 * (1.0 + x->bw1 ); + for( i = 0; i < N2; i++ ) { + if(freqs[i] >= lo && freqs[i] <= hi){ + ploc = (freqs[i] - lo) / (hi - lo); + gainer = 1 + x->gainfac1 * rcos[ (int) (ploc * rcoslen) ] ; + if( gainer < 0 ){ + gainer = 0; + } + filt[i] *= gainer ; + + } + } + // filt 2 + lo = x->cf2 * (1.0 - x->bw2 ); + hi = x->cf2 * (1.0 + x->bw2 ); + for( i = 0; i < N2; i++ ) { + if( freqs[i] >= lo && freqs[i] <= hi){ + ploc = (freqs[i] - lo) / (hi - lo); + gainer = 1 + x->gainfac2 * rcos[ (int) (ploc * rcoslen) ] ; + if( gainer < 0 ){ + gainer = 0; + } + filt[i] *= gainer ; + + } + } + // filt 3 + lo = x->cf3 * (1.0 - x->bw3 ); + hi = x->cf3 * (1.0 + x->bw3 ); + for( i = 0; i < N2; i++ ) { + if(freqs[i] >= lo && freqs[i] <= hi){ + ploc = (freqs[i] - lo) / (hi - lo); + gainer = 1 + x->gainfac3 * rcos[ (int) (ploc * rcoslen) ] ; + if( gainer < 0 ){ + gainer = 0; + } + filt[i] *= gainer ; + + } + } + // filt 4 + lo = x->cf4 * (1.0 - x->bw4 ); + hi = x->cf4 * (1.0 + x->bw4 ); + for( i = 0; i < N2; i++ ) { + if(freqs[i] >= lo && freqs[i] <= hi){ + ploc = (freqs[i] - lo) / (hi - lo); + gainer = 1 + x->gainfac4 * rcos[ (int) (ploc * rcoslen) ] ; + if( gainer < 0 ){ + gainer = 0; + } + filt[i] *= gainer ; + } + } +} + +void filtyQ( float *S, float *C, float *filtfunc, int N2 ) +{ + int real, imag, amp, phase; + t_float a, b; + int i; + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? S[1] : S[real] ); + b = ( i == 0 || i == N2 ? 0. : S[imag] ); + C[amp] = hypot( a, b ); + C[amp] *= filtfunc[ i ]; + C[phase] = -atan2( b, a ); + } + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + S[real] = *(C+amp) * cos( *(C+phase) ); + if ( i != N2 ) + S[imag] = -*(C+amp) * sin( *(C+phase) ); + } +} + +void multyq_dsp(t_multyq *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + multyq_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(multyq_perform, 15, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec, sp[5]->s_vec, sp[6]->s_vec, sp[7]->s_vec, + sp[8]->s_vec, sp[9]->s_vec, sp[10]->s_vec, sp[11]->s_vec, + sp[12]->s_vec, sp[13]->s_vec); + } +} \ No newline at end of file diff --git a/externals/fftease/oscbank.c b/externals/fftease/oscbank.c new file mode 100644 index 000000000..7710fa3ba --- /dev/null +++ b/externals/fftease/oscbank.c @@ -0,0 +1,88 @@ +#include "fftease.h" + +void fftease_oscbank( t_fftease *fft ) +{ + int amp,freq,chan, n; + + t_float a,ainc,f,finc,address; + int D = fft->D; + int I = D; + int L = fft->L; + t_float synt = fft->synt; + t_float P = fft->P; + int R = fft->R; + t_float Iinv = 1./fft->D; + t_float pitch_increment = fft->pitch_increment; + t_float *table = fft->table; + t_float *lastamp = fft->lastamp ; + t_float *lastfreq = fft->lastfreq ; + t_float *bindex = fft->bindex; + t_float *channel = fft->channel; + t_float *output = fft->output; + int hi_bin = fft->hi_bin; + int lo_bin = fft->lo_bin; + t_float maxamp = 0.0; + t_float localthresh, testamp; + short noalias = fft->noalias; + t_float nyquist = fft->nyquist; + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } + if(R == 0){ + post("oscbank got 0 SR"); + return; + } + pitch_increment = P * (t_float) L / (t_float) R; + + if( synt > 0.0 ){ + maxamp = 0.0; + for ( chan = lo_bin; chan < hi_bin; chan++ ){ + amp = chan << 1; + testamp = fabs( channel[amp] ); + if( testamp > maxamp ) + maxamp = testamp; + } + } + localthresh = synt * maxamp; + + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } + freq = ( amp = ( chan << 1 ) ) + 1; + if(noalias){ + if( channel[freq] * P >= nyquist ) + channel[amp] = 0; + } + if ( channel[amp] > localthresh ){ + channel[freq] *= pitch_increment; + finc = ( channel[freq] - ( f = lastfreq[chan] ) )*Iinv; + ainc = ( channel[amp] - ( a = lastamp[chan] ) )*Iinv; + address = bindex[chan]; + if( address < 0 || address >= L){ + address = 0.0; + // post("limited oscbank: bad address"); + } + for ( n = 0; n < I; n++ ) { + // taking this out now: + + if(! fft->init_status ){ // means memory alloc in effect + goto exit; + } + + output[n] += a*table[ (int) address ]; + address += f; + while ( address >= L ) + address -= L; + while ( address < 0 ) + address += L; + a += ainc; + f += finc; + } + lastfreq[chan] = channel[freq]; + lastamp[chan] = channel[amp]; + bindex[chan] = address; + } + } +exit:; +} \ No newline at end of file diff --git a/externals/fftease/overlapadd.c b/externals/fftease/overlapadd.c new file mode 100644 index 000000000..03638c1d2 --- /dev/null +++ b/externals/fftease/overlapadd.c @@ -0,0 +1,29 @@ +/* + * input I is a folded spectrum of length N; output O and + * synthesis window W are of length Nw--overlap-add windowed, + * unrotated, unfolded input data into output O + */ + +#include "fftease.h" + +void fftease_overlapadd(t_fftease *fft) + +{ + t_float *buffer = fft->buffer; + int N = fft->N; + t_float *Wsyn = fft->Wsyn; + t_float *output = fft->output; + int Nw = fft->Nw; + int out_count = fft->out_count; + + int i ; + while ( out_count < 0 ) + out_count += N ; + out_count %= N ; + for ( i = 0 ; i < Nw ; i++ ) { + output[i] += buffer[out_count] * Wsyn[i]; + if ( ++out_count == N ) + out_count = 0 ; + } + fft->out_count = (fft->out_count + fft->D) % fft->Nw; +} diff --git a/externals/fftease/pileup~.c b/externals/fftease/pileup~.c new file mode 100644 index 000000000..f7cb8ed59 --- /dev/null +++ b/externals/fftease/pileup~.c @@ -0,0 +1,357 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pileup_class; + +#define OBJECT_NAME "pileup~" + + +typedef struct _pileup +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + /* pileup vars */ + t_float move_threshold; + t_float *last_frame ; + int *frames_left; + t_float inverse_compensation_gain; // gain up inverse + t_float persistence; // decay factor + int mode; + t_float tadv; + short mute; + t_float hi_freq; + t_float lo_freq; +} t_pileup; + +void pileup_dsp(t_pileup *x, t_signal **sp); +t_int *pileup_perform(t_int *w); +void *pileup_new(t_symbol *s, int argc, t_atom *argv); +void pileup_mute(t_pileup *x, t_floatarg f); +void pileup_free( t_pileup *x ); +void pileup_clear( t_pileup *x ); +void pileup_init(t_pileup *x); +void pileup_mode(t_pileup *x, t_floatarg mode); +void pileup_inverse_gain(t_pileup *x, t_floatarg gain); +void pileup_persistence(t_pileup *x, t_floatarg persistence); +void pileup_transpose(t_pileup *x, t_floatarg tf); +void pileup_synthresh(t_pileup *x, t_floatarg thresh); +void pileup_oscbank(t_pileup *x, t_floatarg flag); +void pileup_highfreq(t_pileup *x, t_floatarg f); +void pileup_lowfreq(t_pileup *x, t_floatarg f); + +void pileup_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pileup~"), (t_newmethod)pileup_new, + (t_method)pileup_free,sizeof(t_pileup), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pileup, x_f); + class_addmethod(c,(t_method)pileup_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pileup_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)pileup_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)pileup_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)pileup_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)pileup_clear,gensym("clear"), 0); + class_addmethod(c,(t_method)pileup_mode,gensym("mode"), A_FLOAT, 0); + class_addmethod(c,(t_method)pileup_inverse_gain,gensym("inverse_gain"), A_FLOAT, 0); + class_addmethod(c,(t_method)pileup_persistence,gensym("persistence"), A_FLOAT, 0); + class_addmethod(c,(t_method)pileup_lowfreq,gensym("lowfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pileup_highfreq,gensym("highfreq"),A_FLOAT,0); + + pileup_class = c; + fftease_announce(OBJECT_NAME); +} + +void pileup_highfreq(t_pileup *x, t_floatarg f) +{ + t_float curfreq; + t_fftease *fft = x->fft; + + if(f < x->lo_freq){ + error("current minimum is %f",x->lo_freq); + return; + } + if(f > fft->R/2 ){ + f = fft->R/2; + } + x->hi_freq = f; + fft->hi_bin = 1; + curfreq = 0; + while(curfreq < x->hi_freq) { + ++(fft->hi_bin); + curfreq += fft->c_fundamental; + } +} + +void pileup_lowfreq(t_pileup *x, t_floatarg f) +{ + t_float curfreq; + t_fftease *fft = x->fft; + + if(f > x->hi_freq){ + error("current maximum is %f",x->lo_freq); + return; + } + if(f < 0 ){ + f = 0; + } + x->lo_freq = f; + fft->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lo_freq ) { + ++(fft->lo_bin); + curfreq += fft->c_fundamental ; + } +} + + +void pileup_transpose(t_pileup *x, t_floatarg tf) +{ + x->fft->P = tf; +} + +void pileup_synthresh(t_pileup *x, t_floatarg thresh) +{ + x->fft->synt = thresh; +} + +void pileup_oscbank(t_pileup *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void pileup_persistence(t_pileup *x, t_floatarg persistence) +{ + x->persistence = persistence; +} + +void pileup_clear(t_pileup *x) +{ + x->last_frame = (t_float*)realloc(x->last_frame,(x->fft->N+2) * sizeof(t_float)); +} + +void pileup_mode(t_pileup *x, t_floatarg mode) +{ + if( mode >= 0 && mode <= 3) + x->mode = (int) mode; +} + +void pileup_inverse_gain(t_pileup *x, t_floatarg gain) +{ + x->inverse_compensation_gain = gain; +} + + +void pileup_free(t_pileup *x){ + if(x->fft->initialized){ + free(x->last_frame); + free(x->frames_left); + } + fftease_free(x->fft); + free(x->fft); +} + +void pileup_mute(t_pileup *x, t_floatarg f){ + x->mute = (short)f; +} + +void *pileup_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pileup *x = (t_pileup *)pd_new(pileup_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void pileup_init(t_pileup *x) +{ + t_fftease *fft = x->fft; + short initialized = fft->initialized; + + fftease_init(fft); + + if(!initialized){ + x->mode = 0; + x->inverse_compensation_gain = 4.0; + x->mute = 0; + x->move_threshold = .00001 ; + + x->last_frame = (t_float *) calloc((fft->N+2), sizeof(t_float)); + x->frames_left = (int *) calloc((fft->N+2), sizeof(int)); + } else { + x->last_frame = (t_float *) realloc(x->last_frame,(fft->N+2)*sizeof(t_float)); + x->frames_left = (int *) realloc(x->frames_left, (fft->N+2) * sizeof(int)); + x->fft->input = (t_float*) realloc(fft->input, fft->Nw * sizeof(t_float)); + x->fft->output = (t_float*) realloc(fft->output, fft->Nw * sizeof(t_float)); + x->fft->c_lastphase_in = (t_float*)realloc(fft->c_lastphase_in, (fft->N2+1) * sizeof(t_float)); + x->fft->c_lastphase_out = (t_float*)realloc(fft->c_lastphase_out, (fft->N2+1) * sizeof(t_float)); + } + x->tadv = (t_float) fft->D / (t_float)fft->R ; +} + +void do_pileup(t_pileup *x) +{ + int i; + t_fftease *fft = x->fft; + t_float *last_frame = x->last_frame; + t_float persistence = x->persistence; // decay factor + int N = fft->N; + t_float *channel = fft->channel; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + + if( x->mode == 0 ){ + for( i = 0; i < N; i += 2 ){ + if( fabs( channel[i] ) < last_frame[i] ){ // fabs? + channel[i] = last_frame[i]; + channel[i + 1] = last_frame[i + 1]; + } else { + last_frame[i] = fabs( channel[i] ); + last_frame[i + 1] = channel[i + 1]; + } + } + } + else if( x->mode == 1) { + for( i = 0; i < N; i += 2 ){ + if( fabs( channel[i] ) < last_frame[i] ){ // fabs? + channel[i] = last_frame[i]; + } else { + last_frame[i] = fabs( channel[i] ); + } + } + } + else if( x->mode == 2 ){ + for( i = 0; i < N; i += 2 ){ + if( fabs( channel[i] ) > last_frame[i] ){ // fabs? + channel[i] = last_frame[i] * x->inverse_compensation_gain; + channel[i + 1] = last_frame[i + 1]; + } else { + last_frame[i] = fabs( channel[i] ); + last_frame[i + 1] = channel[i + 1]; + } + } + } + if( persistence < 1.0){ + for( i = 0; i < N; i += 2 ){ + last_frame[i] *= persistence; + } + } + + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } +} +t_int *pileup_perform(t_int *w) + +{ + int i,j; + t_pileup *x = (t_pileup *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+4; + } + + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_pileup(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pileup(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pileup(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+4; +} + +void pileup_dsp(t_pileup *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pileup_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pileup_perform, 3, x, sp[0]->s_vec, sp[1]->s_vec); + } +} + + diff --git a/externals/fftease/power_of_two.c b/externals/fftease/power_of_two.c new file mode 100644 index 000000000..799d43767 --- /dev/null +++ b/externals/fftease/power_of_two.c @@ -0,0 +1,15 @@ + +int fftease_power_of_two(int test) +{ + int limit = 1048576; + int compare = 1; + do { + if(test == compare){ + return 1; + } + compare *= 2; + } while (compare <= limit); + + return 0; +} + diff --git a/externals/fftease/pvcompand~.c b/externals/fftease/pvcompand~.c new file mode 100644 index 000000000..421b30dad --- /dev/null +++ b/externals/fftease/pvcompand~.c @@ -0,0 +1,329 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvcompand_class; + +#define OBJECT_NAME "pvcompand~" + +typedef struct _pvcompand +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float rescale; + t_float *curthresh; + t_float *atten; + t_float *thresh; + int count; + t_float thresh_interval; + t_float max_atten; + t_float atten_interval; + t_float tstep; + t_float gstep; + t_float last_max_atten; + short norml; + short mute; +} t_pvcompand; + +void pvcompand_dsp(t_pvcompand *x, t_signal **sp); +t_int *pvcompand_perform(t_int *w); +void *pvcompand_new(t_symbol *s, int argc, t_atom *argv); +void update_thresholds(t_pvcompand *x); +void pvcompand_normalize(t_pvcompand *x, t_floatarg val); +void pvcompand_float(t_pvcompand *x, t_float f); +void pvcompand_free(t_pvcompand *x); +float pvcompand_ampdb(float db); +void pvcompand_init(t_pvcompand *x); +void pvcompand_mute(t_pvcompand *x, t_floatarg f); + +void pvcompand_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvcompand~"), (t_newmethod)pvcompand_new, + (t_method)pvcompand_free,sizeof(t_pvcompand), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvcompand, x_f); + class_addmethod(c,(t_method)pvcompand_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvcompand_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)pvcompand_normalize,gensym("normalize"), A_FLOAT, 0); + pvcompand_class = c; + fftease_announce(OBJECT_NAME); +} + +void pvcompand_mute(t_pvcompand *x, t_floatarg f) +{ + x->mute = (short)f; +} + + +void pvcompand_free( t_pvcompand *x ){ + if(x->fft->initialized){ + free(x->curthresh); + free(x->atten); + free(x->thresh); + } + fftease_free(x->fft); + free(x->fft); +} + +void *pvcompand_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pvcompand *x = (t_pvcompand *)pd_new(pvcompand_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->max_atten = -6.0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void pvcompand_init(t_pvcompand *x) +{ + t_fftease *fft = x->fft; + short initialized = x->fft->initialized; + + fftease_init(fft); + + if(!initialized){ + x->norml = 0; + x->mute = 0; + x->thresh_interval = 1.0; + x->last_max_atten = x->max_atten; + x->atten_interval = 2.0 ; + x->tstep = 1.0 ; + x->gstep = 2.0 ; + x->thresh = (t_float *) calloc((fft->N), sizeof(t_float)); + x->atten = (t_float *) calloc(fft->N, sizeof(t_float) ); + x->curthresh = (t_float *) calloc(fft->N, sizeof(t_float) ); + } else if(initialized == 1) { + x->thresh = (t_float *) realloc(x->thresh, fft->N * sizeof(t_float)); + x->atten = (t_float *) realloc(x->atten, fft->N * sizeof(t_float)); + x->curthresh = (t_float *) realloc(x->curthresh, fft->N * sizeof(t_float)); + } + update_thresholds(x); +} + +void update_thresholds( t_pvcompand *x ) { + int i; + t_float nowamp = x->max_atten ; + t_float nowthresh = 0.0 ; + int N = x->fft->N; + x->count = 0; + if( nowamp < 0.0 ){ + while( nowamp < 0.0 ){ + x->atten[x->count] = pvcompand_ampdb( nowamp ); + nowamp += x->gstep ; + ++(x->count); + if(x->count >= N){ + error("count exceeds %d",N); + x->count = N - 1; + break; + } + } + } + else if( nowamp > 0.0 ){ + while( nowamp > 0.0 ){ + x->atten[x->count] = pvcompand_ampdb( nowamp ); + nowamp -= x->gstep ; + ++(x->count); + if(x->count >= N){ + error("count exceeds %d",N); + x->count = N - 1; + break; + } + } + } + for( i = 0; i < x->count; i++){ + x->thresh[i] = pvcompand_ampdb( nowthresh ); + nowthresh -= x->tstep ; + } +} + +void pvcompand_normalize(t_pvcompand *x, t_floatarg val) +{ + x->norml = (short)val; +} + +void do_pvcompand(t_pvcompand *x) +{ + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + int N = fft->N; + t_float *curthresh = x->curthresh; + t_float *thresh = x->thresh; + t_float *atten = x->atten; + int count = x->count; + t_float max_atten = x->max_atten; + int i,j; + t_float maxamp ; + t_float cutoff; + t_float avr, new_avr, rescale; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_leanconvert(fft); + + maxamp = 0.; + avr = 0; + for( i = 0; i < N; i+= 2 ){ + avr += channel[i]; + if( maxamp < channel[i] ){ + maxamp = channel[i] ; + } + } + if(count <= 1){ + // post("count too low!"); + count = 1; + } + for( i = 0; i < count; i++ ){ + curthresh[i] = thresh[i]*maxamp ; + } + cutoff = curthresh[count-1]; + new_avr = 0; + for( i = 0; i < N; i += 2){ + if( channel[i] > cutoff ){ + j = count-1; + while( channel[i] > curthresh[j] ){ + j--; + if( j < 0 ){ + j = 0; + break; + } + } + channel[i] *= atten[j]; + } + new_avr += channel[i] ; + } + + if( x->norml ) { + if( new_avr <= 0 ){ + new_avr = .0001; + } + rescale = avr / new_avr ; + + } else { + rescale = pvcompand_ampdb( max_atten * -.5); + } + for( i = 0; i < N; i += 2){ + channel[i] *= rescale; + } + + fftease_leanunconvert(fft); + fftease_rdft(fft, FFT_INVERSE); + fftease_overlapadd(fft); +} + +t_int *pvcompand_perform(t_int *w) +{ + int i,j; + t_pvcompand *x = (t_pvcompand *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *in2 = (t_float *)(w[3]); + t_float *MSPOutputVector = (t_float *)(w[4]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+5; + } + + x->max_atten = *in2; + if(x->max_atten != x->last_max_atten) { + x->last_max_atten = x->max_atten; + update_thresholds(x); + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_pvcompand(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pvcompand(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvcompand(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+5; +} + +float pvcompand_ampdb(float db) +{ + float amp; + amp = pow((t_float)10.0, (t_float)(db/20.0)) ; + return(amp); +} + +void pvcompand_dsp(t_pvcompand *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pvcompand_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvcompand_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} + + diff --git a/externals/fftease/pvgrain~.c b/externals/fftease/pvgrain~.c new file mode 100644 index 000000000..703690a6a --- /dev/null +++ b/externals/fftease/pvgrain~.c @@ -0,0 +1,318 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvgrain_class; + +#define OBJECT_NAME "pvgrain~" + +typedef struct _pvgrain +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + short *binsort; + t_float topfreq; + t_float bottomfreq; + short bypass; + int mute; + t_float grain_probability; + t_float sample_basefreq; + int grains_per_frame; + void *list_outlet; + t_float *listdata; + short list_count; + void *m_clock; + t_atom myList[2]; + +} t_pvgrain; + +void pvgrain_dsp(t_pvgrain *x, t_signal **sp); +t_int *pvgrain_perform(t_int *w); +void *pvgrain_new(t_symbol *s, int argc, t_atom *argv); +void pvgrain_mute(t_pvgrain *x, t_floatarg state); +void pvgrain_tick(t_pvgrain *x); +void pvgrain_printchan(t_pvgrain *x); +void pvgrain_probability (t_pvgrain *x, t_floatarg prob); +void pvgrain_framegrains (t_pvgrain *x, t_floatarg grains); +void pvgrain_topfreq (t_pvgrain *x, t_floatarg top); +void pvgrain_bottomfreq (t_pvgrain *x, t_floatarg f); +void pvgrain_basefreq (t_pvgrain *x, t_floatarg base); +float pvgrain_randf(float min, float max); +void pvgrain_init(t_pvgrain *x); +void pvgrain_free(t_pvgrain *x); + +void pvgrain_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvgrain~"), (t_newmethod)pvgrain_new, + (t_method)pvgrain_free,sizeof(t_pvgrain), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvgrain, x_f); + class_addmethod(c,(t_method)pvgrain_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvgrain_mute,gensym("mute"),A_FLOAT,0); + + class_addmethod(c,(t_method)pvgrain_printchan,gensym("printchan"),A_DEFFLOAT,0); + class_addmethod(c,(t_method)pvgrain_probability,gensym("probability"),A_DEFFLOAT,0); + class_addmethod(c,(t_method)pvgrain_framegrains,gensym("framegrains"),A_DEFFLOAT,0); + class_addmethod(c,(t_method)pvgrain_topfreq,gensym("topfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvgrain_basefreq,gensym("basefreq"),A_FLOAT,0); + pvgrain_class = c; + fftease_announce(OBJECT_NAME); +} +void pvgrain_printchan(t_pvgrain *x) +{ + int i; + t_float *channel = x->fft->channel; + post("***"); + for( i = 0 ; i < 30; i+= 2 ){ + post("amp %f freq %f", channel[i*2], channel[i*2 + 1]); + } + post("***"); +} + +void pvgrain_basefreq (t_pvgrain *x, t_floatarg base) +{ + int R = x->fft->R; + if( base < 0.0 ) + base = 0. ; + if( base > R / 2 ) + base = R / 2 ; + x->sample_basefreq = base; +} + +void pvgrain_topfreq (t_pvgrain *x, t_floatarg top) +{ + int R = x->fft->R; + t_fftease *fft = x->fft; + + if( top < 50. ) + top = 50.; + if( top > R / 2 ) + top = R / 2; + x->topfreq = top ; + fftease_oscbank_setbins(fft,x->bottomfreq, x->topfreq); +} + +void pvgrain_bottomfreq (t_pvgrain *x, t_floatarg f) +{ + int R = x->fft->R; + t_fftease *fft = x->fft; + if( f >= x->topfreq || f >= R/2){ + post("%f is too high a bottom freq",f); + return; + } + + x->bottomfreq = f; + fftease_oscbank_setbins(fft,x->bottomfreq, x->topfreq); +} + +void pvgrain_probability (t_pvgrain *x, t_floatarg prob) +{ + if( prob < 0. ) + prob = 0.; + if( prob > 1. ) + prob = 1.; + x->grain_probability = prob ; +} + +void pvgrain_framegrains (t_pvgrain *x, t_floatarg grains) +{ + int N2 = x->fft->N2; + if( grains < 1 ) + grains = 1; + if( grains > N2 - 1 ) + grains = N2 - 1; + x->grains_per_frame = grains ; +} + +void pvgrain_tick(t_pvgrain *x) +{ + t_atom *myList = x->myList; + t_float *listdata = x->listdata; + int i; + + for (i=0; i < 2; i++) { + SETFLOAT(myList+i,listdata[i]); /* macro for setting a t_atom */ + } + outlet_list(x->list_outlet,0,2,myList); +} + +void *pvgrain_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pvgrain *x = (t_pvgrain *)pd_new(pvgrain_class); + + x->list_outlet = outlet_new(&x->x_obj, gensym("list")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + + x->grain_probability = 0.0001; + x->topfreq = 1000.0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void pvgrain_init(t_pvgrain *x) +{ + t_fftease *fft = x->fft; + short initialized = fft->initialized; + fftease_init(fft); + + if(!initialized){ + x->m_clock = clock_new(x,(void *)pvgrain_tick); + x->sample_basefreq = 261.0; + x->bottomfreq = 0.0; + x->mute = 0; + x->binsort = (short *) calloc((fft->N2+1), sizeof(short) ); + x->listdata = (t_float *) calloc(40, sizeof(t_float)); + } else if(initialized == 1) { + x->binsort = (short *) realloc(x->binsort,(fft->N2+1) * sizeof(short)); + } + fftease_oscbank_setbins(fft,x->bottomfreq, x->topfreq); +} + +void pvgrain_free(t_pvgrain *x) +{ + if(x->fft->initialized){ + free(x->binsort); + free(x->listdata); + } + fftease_free(x->fft); + free(x->fft); +} + +void do_pvgrain(t_pvgrain *x) +{ + int i,j; + t_float tmp, dice; + short print_grain; + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + short *binsort = x->binsort; + int grains_per_frame = x->grains_per_frame ; + t_float selection_probability = x->grain_probability; + int hi_bin = fft->hi_bin; + int lo_bin = fft->lo_bin; + t_float *listdata = x->listdata; + + x->list_count = 0; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + if( grains_per_frame > hi_bin - lo_bin ) + grains_per_frame = hi_bin - lo_bin; + // binsort[0] = 0; + for( i = 0; i < hi_bin; i++ ){// could be hi_bin - lo_bin + binsort[i] = i + lo_bin; + } + for( i = lo_bin; i < hi_bin - 1; i++ ){ + for( j = i+1; j < hi_bin; j++ ){ + if(channel[binsort[j] * 2] > channel[binsort[i] * 2]) { + tmp = binsort[j]; + binsort[j] = binsort[i]; + binsort[i] = tmp; + } + } + } + for( i = 0; i < grains_per_frame; i++ ){ + print_grain = 1; + dice = fftease_randf(0.,1.); + if( dice < 0.0 || dice > 1.0 ){ + error("dice %f out of range", dice); + } + if( selection_probability < 1.0 ){ + if( dice > selection_probability) { + print_grain = 0; + } + } + if( print_grain ){ + listdata[ x->list_count * 2 ] = channel[ binsort[i]*2 ]; + listdata[ (x->list_count * 2) + 1 ] = channel[(binsort[i]*2) + 1] ; + ++(x->list_count); + clock_delay(x->m_clock,0); + } + } +} + +t_int *pvgrain_perform(t_int *w) +{ + int i; + t_pvgrain *x = (t_pvgrain *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if (x->mute) { + return w+3; + } + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + do_pvgrain(x); + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + do_pvgrain(x); + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + do_pvgrain(x); + } + fft->operationCount = operationCount; + } + return w+3; +} + +void pvgrain_mute(t_pvgrain *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void pvgrain_dsp(t_pvgrain *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pvgrain_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvgrain_perform, 2, x, sp[0]->s_vec); + } +} diff --git a/externals/fftease/pvharm~.c b/externals/fftease/pvharm~.c new file mode 100644 index 000000000..b275c2d7f --- /dev/null +++ b/externals/fftease/pvharm~.c @@ -0,0 +1,351 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvharm_class; + +#define OBJECT_NAME "pvharm~" + +typedef struct _pvharm +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_fftease *fft2; + short mute; + short peakflag; + t_float hifreq;/* highest frequency to synthesize */ + t_float lofreq;/* lowest frequency to synthesize */ + t_float framethresh; /* set lower limit for synth cutoff, to avoid noise */ + int osclimit; + int oscnt; + t_float local_thresh; + t_float framepeak; + t_float *ampsort; /* sort amplitudes from highest to lowest */ + short compressor; /* flag to compress */ + t_float framestop; /* amplitude below which compressor is turned off */ +} t_pvharm; + +void pvharm_dsp(t_pvharm *x, t_signal **sp); +t_int *pvharm_perform(t_int *w); +void *pvharm_new(t_symbol *s, int argc, t_atom *argv); +void pvharm_mute(t_pvharm *x, t_floatarg f); +void pvharm_init(t_pvharm *x); +void pvharm_rel2peak(t_pvharm *x, t_floatarg toggle); +void pvharm_free(t_pvharm *x); +void pvharm_oscnt(t_pvharm *x); +void pvharm_osclimit(t_pvharm *x, t_floatarg f); +void pvharm_compressor(t_pvharm *x, t_floatarg state); +void pvharm_framestop(t_pvharm *x, t_floatarg state); +void pvharm_lowfreq(t_pvharm *x, t_floatarg f); +void pvharm_highfreq(t_pvharm *x, t_floatarg f); + +void pvharm_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvharm~"), (t_newmethod)pvharm_new, + (t_method)pvharm_free,sizeof(t_pvharm), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvharm, x_f); + class_addmethod(c,(t_method)pvharm_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvharm_mute,gensym("mute"),A_FLOAT,0); + + class_addmethod(c,(t_method)pvharm_osclimit,gensym("osclimit"),A_FLOAT,0); + class_addmethod(c,(t_method)pvharm_oscnt,gensym("oscnt"),0); + class_addmethod(c,(t_method)pvharm_compressor,gensym("compressor"),A_FLOAT,0); + class_addmethod(c,(t_method)pvharm_framestop,gensym("framestop"),A_FLOAT,0); + class_addmethod(c,(t_method)pvharm_highfreq,gensym("highfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvharm_lowfreq,gensym("lowfreq"),A_FLOAT,0); + pvharm_class = c; + fftease_announce(OBJECT_NAME); +} + +void pvharm_lowfreq(t_pvharm *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + if(f > x->hifreq){ + error("%s: minimum cannot exceed current maximum: %f",OBJECT_NAME,x->hifreq); + return; + } + if(f < 0 ){ + f = 0; + } + x->lofreq = f; + fftease_oscbank_setbins(fft,x->lofreq, x->hifreq); + fftease_oscbank_setbins(fft2,x->lofreq, x->hifreq); +} + +void pvharm_highfreq(t_pvharm *x, t_floatarg f) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int R = x->fft->R; + if(f < x->lofreq){ + error("%s: maximum cannot go below current minimum: %f",OBJECT_NAME,x->lofreq); + return; + } + if(f > R/2 ){ + f = R/2; + } + x->hifreq = f; + fftease_oscbank_setbins(fft,x->lofreq, x->hifreq); + fftease_oscbank_setbins(fft2,x->lofreq, x->hifreq); +} + +void pvharm_oscnt(t_pvharm *x) +{ + post("%s: osc count: %d, local thresh: %f, frame peak: %f",OBJECT_NAME, x->oscnt, x->local_thresh, x->framepeak); +} + +void pvharm_free(t_pvharm *x) +{ + if(x->fft->initialized){ + free(x->ampsort); + } + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void pvharm_rel2peak(t_pvharm *x, t_floatarg toggle) +{ + x->peakflag = (short)toggle; +} + +void *pvharm_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_pvharm *x = (t_pvharm *)pd_new(pvharm_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + x->lofreq = 0; + x->hifreq = 15000; + fft2->N = fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + + return x; +} + +void pvharm_init(t_pvharm *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->framethresh = 0.005; + x->osclimit = fft->N2; + fft->P = .5 ; // for testing purposes + fft2->P = .6666666666 ; // for testing purposes + x->mute = 0; + x->compressor = 0; + x->framestop = .001; + x->ampsort = (t_float *) calloc((fft->N+1), sizeof(t_float)); + } else if(initialized == 1){ + x->ampsort = (t_float *) realloc(x->ampsort, (fft->N+1) * sizeof(t_float)); + } + fftease_oscbank_setbins(fft, x->lofreq, x->hifreq); + fftease_oscbank_setbins(fft2, x->lofreq, x->hifreq); +} + +void do_pvharm(t_pvharm *x) +{ + t_float framethresh = x->framethresh; + int osclimit = x->osclimit; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int D = fft->D; + int freq, amp,chan; + t_float framesum, frame_rescale; + t_float framestop = x->framestop; + t_float *channel = fft->channel; + t_float *channel2 = fft2->channel; + t_float *output = fft->output; + t_float *output2 = fft2->output; + int lo_bin = fft->lo_bin; + int hi_bin = fft->hi_bin; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + + if(x->compressor){ + framesum = 0.0; + for(chan = fft->lo_bin; chan < fft->hi_bin; chan++){ + amp = chan << 1; + framesum += channel[amp]; + } + if(framesum > framestop && framesum >= 0.0){ + frame_rescale = 1.0 / framesum; + for(chan = lo_bin; chan < hi_bin; chan++){ + amp = chan << 1; + channel[amp] *= frame_rescale; + } + } + } + // copy spectrum to second channel (yes it is inefficient) + + for(chan = lo_bin; chan < hi_bin; chan++){ + amp = chan << 1; + freq = amp + 1; + channel2[amp] = channel[amp]; + channel2[freq] = channel[freq]; + } + fftease_limited_oscbank(fft, osclimit, framethresh); + fftease_limited_oscbank(fft2, osclimit, framethresh); + for(i = 0; i < D; i++){ + output[i] += output2[i]; + } +} + +t_int *pvharm_perform(t_int *w) +{ + int i,j; + t_pvharm *x = (t_pvharm *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *in2 = (t_float *)(w[3]); + t_float *in3 = (t_float *)(w[4]); + t_float *in4 = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float *output2 = fft2->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for( j = 0; j < MSPVectorSize; j++) { + *MSPOutputVector++ = *MSPInputVector++ * FFTEASE_BYPASS_GAIN; + } + return w+7; + } + + fft->P = *in2; + fft2->P = *in3; + fft->synt = fft2->synt = *in4; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + do_pvharm(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + memcpy(output2, output2 + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output2[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pvharm(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + memcpy(output2, output2 + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output2[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvharm( x ); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + memcpy(output2, output2 + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output2[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void pvharm_compressor(t_pvharm *x, t_floatarg state) +{ + x->compressor = (short)state; +} + +void pvharm_framestop(t_pvharm *x, t_floatarg state) +{ + x->framestop = state; +} + +void pvharm_mute(t_pvharm *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void pvharm_osclimit(t_pvharm *x, t_floatarg limit) +{ + x->osclimit = (int)limit; +} + +void pvharm_dsp(t_pvharm *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + pvharm_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvharm_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec, + sp[4]->s_vec); + } +} + diff --git a/externals/fftease/pvoc~.c b/externals/fftease/pvoc~.c new file mode 100644 index 000000000..d8384fc67 --- /dev/null +++ b/externals/fftease/pvoc~.c @@ -0,0 +1,253 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvoc_class; + +#define OBJECT_NAME "pvoc~" + +typedef struct _pvoc +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_float lofreq; + t_float hifreq; + t_float topfreq; + short mute; +} t_pvoc; + +void *pvoc_new(t_symbol *s, int argc, t_atom *argv); +void pvoc_free(t_pvoc *x); +void pvoc_mute(t_pvoc *x, t_floatarg tog); +void pvoc_init(t_pvoc *x); +void pvoc_fftinfo(t_pvoc *x); +void pvoc_lowfreq(t_pvoc *x, t_floatarg f); +void pvoc_highfreq(t_pvoc *x, t_floatarg f); +void do_pvoc(t_pvoc *x ); +t_int *pvoc_perform(t_int *w); +void pvoc_dsp(t_pvoc *x, t_signal **sp); + +void pvoc_tilde_setup(void) +{ + pvoc_class = class_new(gensym("pvoc~"), (t_newmethod)pvoc_new, + (t_method)pvoc_free,sizeof(t_pvoc), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(pvoc_class, t_pvoc, x_f); + class_addmethod(pvoc_class,(t_method)pvoc_dsp,gensym("dsp"),0); + class_addmethod(pvoc_class,(t_method)pvoc_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(pvoc_class,(t_method)pvoc_lowfreq,gensym("lowfreq"),A_FLOAT,0); + class_addmethod(pvoc_class,(t_method)pvoc_highfreq,gensym("highfreq"),A_FLOAT,0); + class_addmethod(pvoc_class,(t_method)pvoc_fftinfo,gensym("fftinfo"),0); + fftease_announce(OBJECT_NAME); +} + +void pvoc_lowfreq(t_pvoc *x, t_floatarg f) +{ + if(!x->fft->initialized) + return; + if(f < 0 ){ + f = 0; + } + x->lofreq = f; + fftease_oscbank_setbins(x->fft,x->lofreq, x->hifreq); +} + +void pvoc_highfreq(t_pvoc *x, t_floatarg f) +{ + if(!x->fft->initialized) + return; + if(f < 0 ){ + f = 0; + } + if(f < x->lofreq){ + error("%s: maximum cannot go below current minimum: %f",OBJECT_NAME,x->lofreq); + return; + } + if(f > x->fft->R/2 ){ + f = x->fft->R/2; + } + x->hifreq = f; + fftease_oscbank_setbins(x->fft,x->lofreq, x->hifreq); +} + +void pvoc_mute(t_pvoc *x, t_floatarg tog) +{ + x->mute = (short)tog; +} + +void pvoc_fftinfo(t_pvoc *x) +{ +t_fftease *fft = x->fft; + fftease_fftinfo( fft, OBJECT_NAME ); +} + +void pvoc_free(t_pvoc *x ){ + fftease_free(x->fft); + free(x->fft); +} + +void pvoc_init(t_pvoc *x) +{ + float curfreq; + t_fftease *fft = x->fft; + + if(fft->initialized == -1){ + return; + } + + fftease_init(fft); + + if( x->hifreq < fft->c_fundamental ) { + post("default hi frequency of 18000 Hz"); + x->hifreq = 18000.0 ; + } + x->fft->hi_bin = 1; + curfreq = 0; + while( curfreq < x->hifreq ) { + ++(x->fft->hi_bin); + curfreq += fft->c_fundamental ; + } + + x->fft->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lofreq ) { + ++(x->fft->lo_bin); + curfreq += fft->c_fundamental; + } +} + +void *pvoc_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pvoc *x = (t_pvoc *)pd_new(pvoc_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + x->lofreq = 0; + x->hifreq = 15000; + x->mute = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv);} + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv);} + if(argc > 2){ x->lofreq = atom_getfloatarg(2, argc, argv);} + if(argc > 3){ x->hifreq = atom_getfloatarg(3, argc, argv);} + fft->initialized = 0;// prepare for init in DSP routine + return x; +} + +void do_pvoc(t_pvoc *x) +{ + t_fftease *fft = x->fft; + fftease_fold(fft); + fftease_rdft(fft, 1); + fftease_convert(fft); + fftease_oscbank(fft); +} + +t_int *pvoc_perform(t_int *w) +{ + t_pvoc *x = (t_pvoc *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *transp = (t_float *)(w[3]); + t_float *synth_thresh = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + + t_fftease *fft = x->fft; + int i, j; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + t_float *input = fft->input; + t_float *output = fft->output; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + fft->P = *transp; + fft->pitch_increment = fft->P*fft->L/fft->R; + fft->synt = *synth_thresh; + + // HERE IS THE GOOD STUFF + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + do_pvoc( x ); + + for ( j = 0; j < D; j++ ){ + *MSPOutputVector++ = output[j] * mult; + } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + do_pvoc( x ); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvoc( x ); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void pvoc_dsp(t_pvoc *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + } + if(reset_required){ + pvoc_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvoc_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} + diff --git a/externals/fftease/pvtuner~.c b/externals/fftease/pvtuner~.c new file mode 100644 index 000000000..0729cab33 --- /dev/null +++ b/externals/fftease/pvtuner~.c @@ -0,0 +1,1014 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvtuner_class; + +#define OBJECT_NAME "pvtuner~" + +#define MAXTONES (8192) +#define BASE_FREQ (27.5) /* low A */ +#define DIATONIC 0 +#define EASTERN 1 +#define MINOR 2 +#define EQ12 3 +#define PENTATONIC 4 +#define MAJOR_ADDED_SIXTH 5 +#define MINOR_ADDED_SIXTH 6 +#define ADDED_SIXTH_MAJOR 5 +#define ADDED_SIXTH_MINOR 6 +#define MAJOR_SEVENTH_CHORD 7 +#define MINOR_SEVENTH_CHORD 8 +#define DOMINANT_SEVENTH_CHORD 9 +#define EQ8 10 +#define PENTACLUST 11 +#define QUARTERCLUST 12 +#define EQ5 13 +#define SLENDRO 14 +#define PELOG 15 +#define IMPORTED_SCALE 16 +#define EQN 17 + +typedef struct { + t_float *pitchgrid; + int scale_steps; // total number of members + short current_scale; +} t_pvtuner_scale; + +typedef struct _pvtuner +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + int lo_bin; + int hi_bin; + int hi_tune_bin; + t_float topfreq; + t_float curfreq; + // TUNING + float *pitchgrid; + float pbase; + int scale_steps; + short current_scale; + short mute; + t_float lofreq; + t_float hifreq; + t_float tabscale; + int scale_len; + short verbose; + long fftsize_attr; + long overlap_attr; + long scale_interpolation; // interpolation flag, set to zero by default + t_float interpolation_dur; // set to 1 second + long interpolation_frames; // == duration / (D/R) + long interpolation_countdown; // count frames for interpolation + t_float ip; // interpolation point + t_pvtuner_scale *this_scale; + t_pvtuner_scale *last_scale; +} t_pvtuner; + + +void pvtuner_dsp(t_pvtuner *x, t_signal **sp); +t_int *pvtuner_perform(t_int *w); +t_float closestf(t_float test, t_float *arr) ; +void pvtuner_diatonic( t_pvtuner *x ); +void pvtuner_eastern( t_pvtuner *x ); +void pvtuner_minor( t_pvtuner *x ); +void pvtuner_eq12( t_pvtuner *x ); +void pvtuner_pentatonic( t_pvtuner *x ); +void pvtuner_major_added_sixth( t_pvtuner *x ); +void pvtuner_minor_added_sixth( t_pvtuner *x ); +void pvtuner_major_seventh_chord( t_pvtuner *x ); +void pvtuner_minor_seventh_chord( t_pvtuner *x ); +void pvtuner_dominant_seventh_chord( t_pvtuner *x ); +void pvtuner_eq8( t_pvtuner *x ); +void pvtuner_pentaclust( t_pvtuner *x ); +void pvtuner_quarterclust( t_pvtuner *x ); +void pvtuner_eq5( t_pvtuner *x ); +void pvtuner_slendro( t_pvtuner *x ); +void pvtuner_pelog( t_pvtuner *x ); +void pvtuner_update_imported( t_pvtuner *x ); +void pvtuner_init(t_pvtuner *x); +void *pvtuner_new(t_symbol *s, int argc, t_atom *argv); +void pvtuner_import_scale(t_pvtuner *x, t_symbol *filename); +void pvtuner_list (t_pvtuner *x, t_symbol *msg, short argc, t_atom *argv); +void pvtuner_toptune( t_pvtuner *x, t_floatarg f ); +void pvtuner_frequency_range(t_pvtuner *x, t_floatarg lo, t_floatarg hi); +void pvtuner_basefreq( t_pvtuner *x, t_floatarg bassfreq); +void pvtuner_free(t_pvtuner *x); +void pvtuner_mute(t_pvtuner *x, t_floatarg state); +void pvtuner_list (t_pvtuner *x, t_symbol *msg, short argc, t_atom *argv); +void pvtuner_binfo(t_pvtuner *x); +void pvtuner_eqn(t_pvtuner *x, t_floatarg steps); +void pvtuner_interpolation(t_pvtuner *x, t_floatarg state); + +void pvtuner_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvtuner~"), (t_newmethod)pvtuner_new, + (t_method)pvtuner_free,sizeof(t_pvtuner), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvtuner, x_f); + class_addmethod(c,(t_method)pvtuner_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvtuner_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)pvtuner_basefreq,gensym("basefreq"),A_DEFFLOAT,0); + class_addmethod(c,(t_method)pvtuner_diatonic,gensym("diatonic"),0); + class_addmethod(c,(t_method)pvtuner_eastern,gensym("eastern"),0); + class_addmethod(c,(t_method)pvtuner_minor,gensym("minor"),0); + class_addmethod(c,(t_method)pvtuner_eq12,gensym("eq12"),0); + class_addmethod(c,(t_method)pvtuner_pentatonic,gensym("pentatonic"),0); + class_addmethod(c,(t_method)pvtuner_major_added_sixth,gensym("added_sixth_major"),0); + class_addmethod(c,(t_method)pvtuner_minor_added_sixth,gensym("added_sixth_minor"),0); + class_addmethod(c,(t_method)pvtuner_major_seventh_chord,gensym("major_seventh_chord"),0); + class_addmethod(c,(t_method)pvtuner_minor_seventh_chord,gensym("minor_seventh_chord"),0); + class_addmethod(c,(t_method)pvtuner_dominant_seventh_chord,gensym("dominant_seventh_chord"),0); + class_addmethod(c,(t_method)pvtuner_eq8,gensym("eq8"),0); + class_addmethod(c,(t_method)pvtuner_pentaclust,gensym("pentaclust"),0); + class_addmethod(c,(t_method)pvtuner_quarterclust,gensym("quarterclust"),0); + class_addmethod(c,(t_method)pvtuner_eq5,gensym("eq5"),0); + class_addmethod(c,(t_method)pvtuner_eqn,gensym("eqn"),A_FLOAT, 0); + class_addmethod(c,(t_method)pvtuner_interpolation,gensym("interpolation"),A_FLOAT, 0); + class_addmethod(c,(t_method)pvtuner_slendro,gensym("slendro"),0); + class_addmethod(c,(t_method)pvtuner_pelog,gensym("pelog"),0); + class_addmethod(c,(t_method)pvtuner_list,gensym("list"),A_GIMME,0); + class_addmethod(c,(t_method)pvtuner_frequency_range,gensym("frequency_range"),A_FLOAT,A_FLOAT, 0); + pvtuner_class = c; + fftease_announce(OBJECT_NAME); +} + +void *pvtuner_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pvtuner *x = (t_pvtuner *)pd_new(pvtuner_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->verbose = 0; + x->lofreq = 0; + x->hifreq = 18000; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} +/* Copies current scale (this_scale) to next scale (next_scale) + */ +void pvtuner_copy_scale(t_pvtuner *x) +{ + int i; + t_pvtuner_scale *this = x->this_scale; + t_pvtuner_scale *last = x->last_scale; + last->scale_steps = this->scale_steps; + last->current_scale = this->current_scale; + for(i = 0; i < last->scale_steps; i++){ + last->pitchgrid[i] = this->pitchgrid[i]; + } +} + +void pvtuner_init(t_pvtuner *x) +{ + int mem; + + t_fftease *fft = x->fft; + if( fft->R <= 0.0 ){ + post("%s: zero sample rate reported - initialization deferred", OBJECT_NAME); + x->fft->initialized = 0; // failed initialization + return; + } + + if(!x->fft->initialized){ + x->mute = 0; + mem = (MAXTONES+1)*sizeof(float); + x->pitchgrid = (float *) calloc(mem,1); + x->pbase = BASE_FREQ; + x->this_scale = (t_pvtuner_scale *) calloc(1,sizeof(t_pvtuner_scale)); + x->last_scale = (t_pvtuner_scale *) calloc(1,sizeof(t_pvtuner_scale)); + x->this_scale->pitchgrid = (t_float *) calloc(1,mem); + x->last_scale->pitchgrid = (t_float *) calloc(1,mem); + x->this_scale->scale_steps = 0; + x->last_scale->scale_steps = 0; + pvtuner_diatonic(x);// default scale (rebuilt for new scale structure) + pvtuner_copy_scale(x); // now both this and next scale are diatonic + } + + fftease_init(fft); + if( x->fft->D && x->fft->R ){ + /* + x->interpolation_frames = x->interpolation_dur / ((float)x->fft->D / (float)x->fft->R); + post("interpolation frames: %d", x->interpolation_frames); + */ + } else { + post("pvtuner~: dire warning!"); + return; + // dire warning + } + fftease_oscbank_setbins(fft,x->lofreq, x->hifreq); + x->hi_tune_bin = fft->hi_bin; +} + +void pvtuner_toptune(t_pvtuner *x, t_floatarg f) +{ + int tbin; + t_float curfreq; + t_float fundamental = x->fft->c_fundamental; + t_fftease *fft = x->fft; + tbin = 1; + curfreq = 0; + + if( f < 0 || f > x->fft->R / 2.0 ){ + error("frequency %f out of range", f); + return; + } + while( curfreq < f ) { + ++tbin; + curfreq += fundamental ; + } + if( tbin > fft->lo_bin && tbin <= fft->hi_bin ){ + x->hi_tune_bin = tbin; + } else { + error("pvtuner~: bin %d out of range", tbin); + } + +} + + +void pvtuner_list (t_pvtuner *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_float *pitchgrid = x->this_scale->pitchgrid; + t_float dval; + t_pvtuner_scale *s = x->this_scale; + int i = 0; + + if( ! atom_getfloatarg(i,argc,argv) ){ + error("either zero length scale or 0.0 (prohibited) is first value"); + return; + } + pvtuner_copy_scale(x); + /* first set every value to maximum */ + for(i=0; i < MAXTONES; i++){ + pitchgrid[i] = (t_float)x->fft->R / 2.0; + } + // now read scale + for( i = 0; i < argc; i++ ){ + dval = atom_getfloatarg(i,argc,argv); + pitchgrid[ i ] = dval; + } + s->scale_steps = argc; + s->current_scale = IMPORTED_SCALE; +} + +void pvtuner_binfo(t_pvtuner *x) +{ + t_fftease *fft = x->fft; + post("%s: frequency targets: %f %f", OBJECT_NAME, x->lofreq, x->hifreq); + post("synthesizing %d bins, from %d to %d",(fft->hi_bin - fft->lo_bin), fft->lo_bin, fft->hi_bin); +} + +void pvtuner_frequency_range(t_pvtuner *x, t_floatarg lo, t_floatarg hi) +{ + t_fftease *fft = x->fft; + x->lofreq = lo ; + x->hifreq = hi; + + + if( lo >= hi ){ + error("low frequency must be lower than high frequency"); + return; + } + x->curfreq = 0; + fft->hi_bin = 0; + + while( x->curfreq < x->hifreq ) { + ++(fft->hi_bin); + x->curfreq += x->fft->c_fundamental; + } + + x->curfreq = 0; + fft->lo_bin = 0; + while( x->curfreq < x->lofreq ) { + ++(fft->lo_bin); + x->curfreq += x->fft->c_fundamental ; + } +} + +void do_pvtuner(t_pvtuner *x) +{ + t_fftease *fft = x->fft; + int freq,chan; + t_float *channel = fft->channel; + t_float *this_pitchgrid = x->this_scale->pitchgrid; + t_float *last_pitchgrid = x->last_scale->pitchgrid; + int hi_bin = fft->hi_bin; + int lo_bin = fft->lo_bin; + int hi_tune_bin = x->hi_tune_bin; + long scale_interpolation = x->scale_interpolation; + t_float ip = x->ip; + t_float freq_this, freq_last; + fftease_fold(fft); + fftease_rdft(fft, 1); + fftease_convert(fft); + // static case + if( scale_interpolation == 0) { + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan * 2) + 1; + if(chan <= hi_tune_bin){ + channel[freq] = closestf(channel[freq], this_pitchgrid); + } + } + } + // interpolated case + else if( scale_interpolation == 1) { + // clip + if( ip < 0 ) + ip = 0; + if( ip > 1 ) + ip = 1; + // degenerate cases first + if( ip == 0 ){ + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan * 2) + 1; + if(chan <= hi_tune_bin){ + channel[freq] = closestf(channel[freq], last_pitchgrid); + } + } + } + else if ( ip == 1){ + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan * 2) + 1; + if(chan <= hi_tune_bin){ + channel[freq] = closestf(channel[freq], this_pitchgrid); + } + } + } + else { + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan * 2) + 1; + if(chan <= hi_tune_bin){ + freq_this = closestf(channel[freq], this_pitchgrid); + freq_last = closestf(channel[freq], last_pitchgrid); + channel[freq] = freq_last + (freq_this - freq_last) * ip; // linear interpolation + } + } + } + } + fftease_oscbank(fft); +} + + +t_int *pvtuner_perform(t_int *w) +{ + int i,j; + t_pvtuner *x = (t_pvtuner *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *pitchfac = (t_float *)(w[3]); + t_float *synth_thresh = (t_float *)(w[4]); + t_float *ip = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + t_fftease *fft = x->fft; + + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + t_float *input = fft->input; + t_float *output = fft->output; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + + if (x->mute) { + memset(MSPOutputVector, 0.0, MSPVectorSize * sizeof(float)); + return w+7; + } + + fft->P = *pitchfac; + fft->synt = *synth_thresh ; + x->ip = *ip; + + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_pvtuner(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pvtuner(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvtuner(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void pvtuner_basefreq( t_pvtuner *x, t_floatarg bassfreq) +{ + if(! x->fft->initialized){ + return; + } + if( bassfreq < 1 ){ + bassfreq = 1; + post("%s: base frequency may not go lower than 1 Hz", OBJECT_NAME); + } + if( bassfreq > 10000. ){ + bassfreq = 10000.; + post("%s: base frequency may not go higher than 10000 Hz", OBJECT_NAME); + } + x->pbase = bassfreq; + if( x->current_scale == IMPORTED_SCALE ){ + pvtuner_update_imported( x ); + } + else if( x->current_scale == DIATONIC ){ + pvtuner_diatonic( x ); + } + else if( x->current_scale == EASTERN) { + pvtuner_eastern( x ); + } + else if( x->current_scale == MINOR) { + pvtuner_minor( x ); + } + else if( x->current_scale == EQ12) { + pvtuner_eq12( x ); + } + else if( x->current_scale == PENTATONIC) { + pvtuner_pentatonic( x ); + } + else if( x->current_scale == MAJOR_ADDED_SIXTH) { + pvtuner_major_added_sixth( x ); + } + else if( x->current_scale == MINOR_ADDED_SIXTH) { + pvtuner_minor_added_sixth( x ); + } + else if( x->current_scale == MAJOR_SEVENTH_CHORD) { + pvtuner_major_seventh_chord( x ); + } + else if( x->current_scale == MINOR_SEVENTH_CHORD) { + pvtuner_minor_seventh_chord( x ); + } + else if( x->current_scale == DOMINANT_SEVENTH_CHORD) { + pvtuner_dominant_seventh_chord( x ); + } + else if( x->current_scale == EQ8) { + pvtuner_eq8( x ); + } + else if( x->current_scale == PENTACLUST) { + pvtuner_pentaclust( x ); + } + else if( x->current_scale == QUARTERCLUST ) { + pvtuner_quarterclust( x ); + } + else if( x->current_scale == EQ5 ) { + pvtuner_eq5( x ); + } + else if( x->current_scale == SLENDRO ) { + pvtuner_slendro( x ); + } + else if( x->current_scale == PELOG ) { + pvtuner_pelog( x ); + } + else { + post("unknown scale"); + } +} + +void pvtuner_free(t_pvtuner *x) +{ + if(x->fft->initialized){ + free(x->this_scale); + free(x->last_scale); + } + fftease_free(x->fft); + free(x->fft); +} + +void pvtuner_update_imported( t_pvtuner *x ){ + t_float *pitchgrid = x->this_scale->pitchgrid; + t_float factor; + int i; + + if( pitchgrid[0] <= 0.0){ + error("%s: illegal first value of scale: %f",OBJECT_NAME,pitchgrid[0]); + return; + } + + factor = x->pbase / pitchgrid[0]; + pvtuner_copy_scale(x); // copies this scale to next + for( i = 0; i < x->scale_len; i++ ) + pitchgrid[i] *= factor; +} + +void pvtuner_diatonic( t_pvtuner *x ){ + int i, j; + int octsteps = 7; + t_pvtuner_scale *s = x->this_scale; + + pvtuner_copy_scale(x); // copies this scale to next + + s->pitchgrid[0] = x->pbase; + s->pitchgrid[1] = x->pbase * (9./8.); + s->pitchgrid[2] = x->pbase * (5./4.); + s->pitchgrid[3] = x->pbase * (4./3.); + s->pitchgrid[4] = x->pbase * (3./2.); + s->pitchgrid[5] = x->pbase * (27./16.); + s->pitchgrid[6] = x->pbase * (15./8.); + s->scale_steps = 7; + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + s->pitchgrid[ i * octsteps + j] = s->pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = DIATONIC ; + s->scale_steps = 70; // 10 * 7 +} + +void pvtuner_minor( t_pvtuner *x ){ + int i, j; + int octsteps = 7; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + + pvtuner_copy_scale(x); // copies this scale to next + + pitchgrid[0] = x->pbase; + pitchgrid[1] = x->pbase * (9./8.); + pitchgrid[2] = x->pbase * (6./5.); + pitchgrid[3] = x->pbase * (4./3.); + pitchgrid[4] = x->pbase * (3./2.); + pitchgrid[5] = x->pbase * (8./5.); + pitchgrid[6] = x->pbase * (9./5.); + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = MINOR; + s->scale_steps = 70; + +} + +void pvtuner_pentatonic( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + int octsteps = 5; + pvtuner_copy_scale(x); + pitchgrid[0] = x->pbase; + pitchgrid[1] = x->pbase * (9./8.); + pitchgrid[2] = x->pbase * (81./64.); + pitchgrid[3] = x->pbase * (3./2.); + pitchgrid[4] = x->pbase * (27./16.); + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = PENTATONIC; + s->scale_steps = 50; +} + +void pvtuner_eq12( t_pvtuner *x ){ + int i, j; + t_float expon; + int octsteps = 12; + t_float pbase = x->pbase; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + + pvtuner_copy_scale(x); // copies this scale to next + + // now refill this scale + pitchgrid[0] = pbase; + for( i = 0; i < octsteps; i++ ){ + expon = (float) i / (float) octsteps; + pitchgrid[i] = pbase * pow(2.0,expon); + } + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = EQ12; + s->scale_steps = 120; +} + +void pvtuner_major_added_sixth( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + t_float pbase = x->pbase; + int octsteps = 4; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.259921; + pitchgrid[2] = pbase * 1.498307; + pitchgrid[3] = pbase * 1.681793; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = MAJOR_ADDED_SIXTH; + s->scale_steps = 40; +} + +void pvtuner_minor_added_sixth( t_pvtuner *x ){ + int i, j; + // float *pitchgrid = x->pitchgrid; + t_float pbase = x->pbase; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + int octsteps = 4; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.189207; + pitchgrid[2] = pbase * 1.498307; + pitchgrid[3] = pbase * 1.587401; + // scale_steps = 4 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = MINOR_ADDED_SIXTH; + s->scale_steps = 40; +} + +void pvtuner_major_seventh_chord( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.25; + pitchgrid[2] = pbase * 1.5; + pitchgrid[3] = pbase * 1.875; + scale_steps = 4 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = MAJOR_SEVENTH_CHORD; + s->scale_steps = 40; +} + +void pvtuner_minor_seventh_chord( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.2; + pitchgrid[2] = pbase * 1.5; + pitchgrid[3] = pbase * 1.781797; + scale_steps = 4 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = MINOR_SEVENTH_CHORD; + s->scale_steps = 40; +} + +void pvtuner_dominant_seventh_chord( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.25; + pitchgrid[2] = pbase * 1.5; + pitchgrid[3] = pbase * 1.781797; + scale_steps = 4 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = DOMINANT_SEVENTH_CHORD; + s->scale_steps = 40; +} +void pvtuner_eqn( t_pvtuner *x, t_floatarg steps ) +{ +int dexter = 0; + if(steps <= 0.0){ + return; + } + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = x->this_scale->pitchgrid; + + float pbase = x->pbase; + float factor = pow(2.0, (1.0/steps) ); + + pvtuner_copy_scale(x); + + while(pbase < (x->fft->R / 2.0) && dexter < MAXTONES ){ + pitchgrid[dexter] = pbase; + pbase = pbase * factor; + dexter = dexter + 1; + } + s->scale_steps = dexter; + s->current_scale = EQN; +} + +void pvtuner_eq8( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int octsteps = 8; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.090508; + pitchgrid[2] = pbase * 1.189207; + pitchgrid[3] = pbase * 1.296840; + pitchgrid[4] = pbase * 1.414214; + pitchgrid[5] = pbase * 1.542211; + pitchgrid[6] = pbase * 1.681793; + pitchgrid[7] = pbase * 1.834008; + + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < octsteps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = EQ8; + s->scale_steps = 80; +} + +void pvtuner_pentaclust( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.059463; + pitchgrid[2] = pbase * 1.122462; + pitchgrid[3] = pbase * 1.189207; + pitchgrid[4] = pbase * 1.259921; + + scale_steps = 5 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = PENTACLUST; + s->scale_steps = 50; +} + +void pvtuner_quarterclust( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.029302; + pitchgrid[2] = pbase * 1.059463; + pitchgrid[3] = pbase * 1.090508; + pitchgrid[4] = pbase * 1.122462; + pitchgrid[5] = pbase * 1.155353; + pitchgrid[6] = pbase * 1.189207; + pitchgrid[7] = pbase * 1.224054; + + scale_steps = 8 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = QUARTERCLUST; + s->scale_steps = 80; +} + +void pvtuner_eq5( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.148698; + pitchgrid[2] = pbase * 1.319508; + pitchgrid[3] = pbase * 1.515717; + pitchgrid[4] = pbase * 1.741101; + + scale_steps = 5 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = EQ5; + s->scale_steps = 50; +} + +void pvtuner_pelog( t_pvtuner *x ){ + int i, j; + t_float *pitchgrid = x->this_scale->pitchgrid; + t_pvtuner_scale *s = x->this_scale; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.152; + pitchgrid[2] = pbase * 1.340; + pitchgrid[3] = pbase * 1.532; + pitchgrid[4] = pbase * 1.756; + scale_steps = 5 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = PELOG; + s->scale_steps = 50; +} + +void pvtuner_slendro( t_pvtuner *x ){ + int i, j; + t_float *pitchgrid = x->this_scale->pitchgrid; + t_pvtuner_scale *s = x->this_scale; + t_float pbase = x->pbase; + int scale_steps; + + pvtuner_copy_scale(x); + + pitchgrid[0] = pbase; + pitchgrid[1] = pbase * 1.104; + pitchgrid[2] = pbase * 1.199; + pitchgrid[3] = pbase * 1.404; + pitchgrid[4] = pbase * 1.514; + pitchgrid[5] = pbase * 1.615; + pitchgrid[6] = pbase * 1.787; + scale_steps = 7 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < scale_steps; j++ ){ + pitchgrid[ i * scale_steps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = SLENDRO; + s->scale_steps = 70; +} +void pvtuner_eastern( t_pvtuner *x ){ + int i, j; + t_pvtuner_scale *s = x->this_scale; + t_float *pitchgrid = s->pitchgrid; + pvtuner_copy_scale(x); + int octsteps = 7; + + pitchgrid[0] = x->pbase; + pitchgrid[1] = x->pbase * 1.059463; + pitchgrid[2] = x->pbase * 1.259921; + pitchgrid[3] = x->pbase * 1.334840; + pitchgrid[4] = x->pbase * 1.498307; + pitchgrid[5] = x->pbase * 1.587401; + pitchgrid[6] = x->pbase * 1.887749; + // scale_steps = 7 ; + + for( i = 1; i < 10; i++ ){ + for( j = 0; j < x->scale_steps; j++ ){ + pitchgrid[ i * octsteps + j] = pitchgrid[j] * pow(2.0,(float)i); + } + } + s->current_scale = EASTERN ; + s->scale_steps = 70; + // post("eastern scale"); +} + +t_float closestf(t_float test, t_float *arr) +{ + int i; + i = 0; + if( test <= arr[0] ){ + return arr[0]; + } + while( i < MAXTONES ){ + if( arr[i] > test ){ + break; + } + ++i; + } + if( i >= MAXTONES - 1) { + return arr[MAXTONES - 1]; + } + if( (test - arr[i-1]) > ( arr[i] - test) ) { + return arr[i]; + } else { + return arr[i-1]; + } +} + +void pvtuner_interpolation(t_pvtuner *x, t_floatarg state) +{ + x->scale_interpolation = (short)state; +} + +void pvtuner_mute(t_pvtuner *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void pvtuner_dsp(t_pvtuner *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pvtuner_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvtuner_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec); + } +} + diff --git a/externals/fftease/pvwarpb~.c b/externals/fftease/pvwarpb~.c new file mode 100644 index 000000000..1ef609595 --- /dev/null +++ b/externals/fftease/pvwarpb~.c @@ -0,0 +1,515 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvwarpb_class; + +#define OBJECT_NAME "pvwarpb~" + +typedef struct _pvwarpb +{ + t_object x_obj; + t_float x_f; + t_symbol *buffername; + t_float lofreq;/* user speficied lowest synthfreq */ + t_float hifreq;/* user specified highest synthfreq */ + t_float topfreq; + t_fftease *fft; + short mute; + short please_update; + short always_update; + t_float cf1; + t_float bw1; + t_float warpfac1; + t_float cf2; + t_float bw2; + t_float warpfac2; + int funcoff; + short verbose; + short automate; + t_float *warpfunc; // workspace to create a new function + short initialized; // state for object + int b_frames; + t_float *b_samples; + int b_valid; +} t_pvwarpb; + +void pvwarpb_dsp(t_pvwarpb *x, t_signal **sp); +t_int *pvwarpb_perform(t_int *w); +void *pvwarpb_new(t_symbol *s, int argc, t_atom *argv); +void pvwarpb_mute(t_pvwarpb *x, t_floatarg state); +void pvwarpb_automate(t_pvwarpb *x, t_floatarg state); +void pvwarpb_autofunc(t_pvwarpb *x, t_floatarg minval, t_floatarg maxval); +void pvwarpb_free( t_pvwarpb *x ); +t_float fftease_randf( t_float min, t_float max ); +t_float closestf(t_float test, t_float *arr) ; +int freq_to_bin(t_float target, t_float fundamental); +void update_warp_function( t_pvwarpb *x ) ; +void pvwarpb_init(t_pvwarpb *x); +void pvwarpb_bottomfreq(t_pvwarpb *x, t_floatarg f); +void pvwarpb_topfreq(t_pvwarpb *x, t_floatarg f); +void pvwarpb_attachbuf(t_pvwarpb *x); +void pvwarpb_setbuf(t_pvwarpb *x, t_symbol *wavename); +void pvwarpb_redraw(t_pvwarpb *x); + +void pvwarpb_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvwarpb~"), (t_newmethod)pvwarpb_new, + (t_method)pvwarpb_free,sizeof(t_pvwarpb), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvwarpb, x_f); + class_addmethod(c,(t_method)pvwarpb_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvwarpb_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarpb_bottomfreq,gensym("bottomfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarpb_topfreq,gensym("topfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarpb_autofunc,gensym("autofunc"),A_DEFFLOAT, A_DEFFLOAT,0); + pvwarpb_class = c; + fftease_announce(OBJECT_NAME); +} + +void pvwarpb_automate(t_pvwarpb *x, t_floatarg state) +{ + x->automate = state; +} + +void update_warp_function( t_pvwarpb *x ) +{ + int i,j; + int N2 = x->fft->N2; + t_float warpfac1 = x->warpfac1; + t_float warpfac2 = x->warpfac2; + long b_frames; + t_float *warpfunc = x->warpfunc; + float *b_samples; + t_float cf1 = x->cf1; + t_float cf2 = x->cf2; + t_float bw1 = x->bw1; + t_float bw2 = x->bw2; + t_float c_fundamental = x->fft->c_fundamental; + t_float deviation; + t_float diff; + int midbin, lobin, hibin ; + t_float hif, lof; + int bin_extent; + + pvwarpb_attachbuf(x); + + b_frames = x->b_frames; + if(b_frames < N2){ + post("%s: table too small",OBJECT_NAME); + return; + } + + for( i = 0; i < N2; i++ ){ + warpfunc[i] = 1.0; + } + hif = cf1 * (1. + bw1); + lof = cf1 * (1. - bw1); + midbin = freq_to_bin( cf1, c_fundamental ); + hibin = freq_to_bin( hif, c_fundamental ); + lobin = freq_to_bin( lof, c_fundamental ); + if( hibin >= N2 - 1 ){ + hibin = N2 - 1; + } + if( lobin < 0 ){ + lobin = 0; + } +/* if( verbose ) + post("bump1: hi %d mid %d lo %d",hibin,midbin,lobin); */ + + warpfunc[midbin] = warpfac1; + diff = warpfac1 - 1.0 ; + bin_extent = hibin - midbin ; + for( i = midbin, j = 0; i < hibin; i++, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + bin_extent = midbin - lobin ; + for( i = midbin, j = 0; i > lobin; i--, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + + // NOW DO SECOND BUMP + hif = cf2 * (1. + bw2); + lof = cf2 * (1. - bw2); + midbin = freq_to_bin( cf2, c_fundamental ); + hibin = freq_to_bin( hif, c_fundamental ); + lobin = freq_to_bin( lof, c_fundamental ); + if( hibin >= N2 - 1 ){ + hibin = N2 - 1; + } + if( lobin < 0 ){ + lobin = 0; + } + /* if( verbose ) + post("bump2: hi %d mid %d lo %d",hibin,midbin,lobin); */ + warpfunc[midbin] = warpfac2; + diff = warpfac2 - 1.0 ; + bin_extent = hibin - midbin ; + for( i = midbin, j = 0; i < hibin; i++, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + bin_extent = midbin - lobin ; + for( i = midbin, j = 0; i > lobin; i--, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + // buffer stuffer + b_samples = x->b_samples; + for(i = 0; i < N2; i++){ + b_samples[i] = warpfunc[i]; + } + x->please_update = 0; + pvwarpb_redraw(x); +} + +void pvwarpb_redraw(t_pvwarpb *x) +{ + t_garray *a; + if (!(a = (t_garray *)pd_findbyclass(x->buffername, garray_class))) { + if (*x->buffername->s_name) pd_error(x, "function~: %s: no such array", x->buffername->s_name); + } + else { + garray_redraw(a); + } +} + +void pvwarpb_verbose(t_pvwarpb *x, t_floatarg state) +{ + x->verbose = state; +} + +void pvwarpb_autofunc(t_pvwarpb *x, t_floatarg minval, t_floatarg maxval) +{ + int minpoints, maxpoints, segpoints, i; + int pointcount = 0; + t_float target, lastval; + t_float m1, m2; + int N2 = x->fft->N2; + long b_frames; + t_float *warpfunc = x->warpfunc; + float *b_samples; + + pvwarpb_attachbuf(x); + + b_frames = x->b_frames; + if(b_frames < N2){ + post("%s: table too small or not mono",OBJECT_NAME); + return; + } + + minpoints = 0.05 * (float) N2; + maxpoints = 0.25 * (float) N2; + if( minval > 1000.0 || minval < .001 ){ + minval = 0.5; + } + if( maxval < 0.01 || maxval > 1000.0 ){ + minval = 2.0; + } + + lastval = fftease_randf(minval, maxval); + // post("automate: min %d max %d",minpoints, maxpoints); + while( pointcount < N2 ){ + target = fftease_randf(minval, maxval); + segpoints = minpoints + (rand() % (maxpoints-minpoints)); + if( pointcount + segpoints > N2 ){ + segpoints = N2 - pointcount; + } + for( i = 0; i < segpoints; i++ ){ + m2 = (float)i / (float) segpoints ; + m1 = 1.0 - m2; + warpfunc[ pointcount + i ] = m1 * lastval + m2 * target; + } + lastval = target; + pointcount += segpoints; + } + // buffer stuffer + b_samples = x->b_samples; + for(i = 0; i < N2; i++){ + b_samples[i] = warpfunc[i]; + } + pvwarpb_redraw(x); +} + +void pvwarpb_mute(t_pvwarpb *x, t_floatarg state) +{ + x->mute = state; +} + +void pvwarpb_free( t_pvwarpb *x ){ + if(x->fft->initialized){ + free(x->warpfunc); + } + fftease_free(x->fft); + free(x->fft); +} + +void *pvwarpb_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_pvwarpb *x = (t_pvwarpb *)pd_new(pvwarpb_class); + int i; + for(i=0;i<3;i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; // for FFTease package + x->initialized = 0; // for object + x->lofreq = 0.0; + x->hifreq = 10000.0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + x->warpfunc = (t_float *) calloc(8192, sizeof(t_float)); + if(argc > 0){ x->buffername = atom_getsymbolarg(0, argc, argv); } + else { post("%s: Must specify array name", OBJECT_NAME); return NULL; } + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + return x; +} + +void pvwarpb_init(t_pvwarpb *x) +{ + t_fftease *fft = x->fft; + + fftease_init(fft); + + if(!x->initialized){ + srand(clock()); + x->please_update = 0; + x->verbose = 0; + x->mute = 0; + x->topfreq = 3000. ; + x->always_update = 0; + x->automate = 0; + x->warpfac1 = 1.0; + x->warpfac2 = 1.0; + x->funcoff = 0; + x->cf1 = 500.; + x->cf2 = 3000.; + x->bw1 = 0.2; + x->bw2 = 0.2; + x->initialized = 1; + } + if(fft->N2 > 8192){ + x->warpfunc = (t_float *) realloc(x->warpfunc, fft->N2); + } + fftease_oscbank_setbins(fft,x->lofreq, x->hifreq); +} + +void pvwarpb_bottomfreq(t_pvwarpb *x, t_floatarg f) +{ + if( f < 0 || f > x->fft->R / 2.0 ){ + error("%s: frequency %f out of range", OBJECT_NAME, f); + return; + } + x->lofreq = f; + fftease_oscbank_setbins(x->fft, x->lofreq, x->hifreq); +} + +void pvwarpb_topfreq(t_pvwarpb *x, t_floatarg f) +{ + if( f < x->lofreq || f > x->fft->R / 2.0 ){ + error("%s: frequency %f out of range", OBJECT_NAME, f); + return; + } + x->hifreq = f; + fftease_oscbank_setbins(x->fft, x->lofreq, x->hifreq); +} + +void do_pvwarpb(t_pvwarpb *x) +{ + t_fftease *fft = x->fft; + int lo_bin = fft->lo_bin; + int hi_bin = fft->hi_bin; + int chan, freq; + int funcoff = x->funcoff; + int N2 = fft->N2; + t_float *channel = fft->channel; + long b_frames; + float *b_samples; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + + b_samples = x->b_samples; + if(! b_samples){ + goto panic2; + } + + b_frames = x->b_frames; + if(b_frames < N2){ + post("%s: table too small",OBJECT_NAME); + goto panic1; + } + + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan << 1) + 1; + channel[freq] *= b_samples[(chan + funcoff) % N2]; + } +panic1: ; +panic2: ; + fftease_oscbank(fft); +} + +t_int *pvwarpb_perform(t_int *w) +{ + int i,j; + + t_float f; + t_pvwarpb *x = (t_pvwarpb *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *in7 = (t_float *)(w[3]); + t_float *in8 = (t_float *)(w[4]); + t_float *in9 = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + int N2 = fft->N2; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + pvwarpb_attachbuf(x); + if(x->mute || !x->b_valid || x->b_frames < N2){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+7; + } + + f = *in7 ; + if( f < 0 ) { + f = 0.0; + } else if (f > 1.0 ){ + f = 1.0; + } + x->funcoff = (int) (f * (t_float) (N2 - 1)); + fft->P = *in8 ; + fft->synt = *in9; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_pvwarpb(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pvwarpb(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvwarpb(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + + +int freq_to_bin( t_float target, t_float fundamental ){ + float lastf = 0.0; + float testf = 0.0; + int thebin = 0; + while( testf < target ){ + ++thebin; + lastf = testf; + testf += fundamental; + } + + if(fabs(target - testf) < fabs(target - lastf) ){ + return thebin; + } else { + return (thebin - 1); + } +} + +void pvwarpb_attachbuf(t_pvwarpb *x) +{ + int frames; + t_symbol *buffername = x->buffername; + t_garray *a; + + x->b_frames = 0; + x->b_valid = 0; + if (!(a = (t_garray *)pd_findbyclass(buffername, garray_class))) + { + if (*buffername->s_name) pd_error(x, "player~: %s: no such array", + buffername->s_name); + } + else if (!garray_getfloatarray(a, &frames, &x->b_samples)) + { + pd_error(x, "%s: bad template for player~", buffername->s_name); + } + else { + x->b_frames = frames; + x->b_valid = 1; + garray_usedindsp(a); + } +} + +void pvwarpb_setbuf(t_pvwarpb *x, t_symbol *wavename) +{ + x->buffername = wavename; +} + +void pvwarpb_dsp(t_pvwarpb *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pvwarpb_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvwarpb_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec); + } +} \ No newline at end of file diff --git a/externals/fftease/pvwarp~.c b/externals/fftease/pvwarp~.c new file mode 100644 index 000000000..d0748d8d6 --- /dev/null +++ b/externals/fftease/pvwarp~.c @@ -0,0 +1,439 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *pvwarp_class; + +#define OBJECT_NAME "pvwarp~" + +typedef struct _pvwarp +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float hifreq; // user specified highest synthfreq + t_float lofreq;//user speficied lowest synthfreq + t_float topfreq; + short *connections; + short mute; + short bypass; + int pitch_connected; + int synt_connected; + t_float *warpfunc ; + short please_update; + short always_update; + t_float cf1; + t_float bw1; + t_float warpfac1; + t_float cf2; + t_float bw2; + t_float warpfac2; + int funcoff; + short verbose; + short automate; + long fftsize_attr; + long overlap_attr; +} t_pvwarp; + +void pvwarp_dsp(t_pvwarp *x, t_signal **sp); +t_int *pvwarp_perform(t_int *w); +void *pvwarp_new(t_symbol *s, int argc, t_atom *argv); +void pvwarp_mute(t_pvwarp *x, t_floatarg state); +void pvwarp_automate(t_pvwarp *x, t_floatarg state); +void pvwarp_autofunc(t_pvwarp *x, t_floatarg minval, t_floatarg maxval); +void pvwarp_free( t_pvwarp *x ); +float closestf(float test, float *arr) ; +int freq_to_bin( float target, float fundamental ); +void update_warp_function( t_pvwarp *x ) ; +void pvwarp_init(t_pvwarp *x); +void pvwarp_bottomfreq(t_pvwarp *x, t_floatarg f); +void pvwarp_topfreq(t_pvwarp *x, t_floatarg f); +void pvwarp_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("pvwarp~"), (t_newmethod)pvwarp_new, + (t_method)pvwarp_free,sizeof(t_pvwarp), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_pvwarp, x_f); + class_addmethod(c,(t_method)pvwarp_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)pvwarp_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarp_bottomfreq,gensym("bottomfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarp_topfreq,gensym("topfreq"),A_FLOAT,0); + class_addmethod(c,(t_method)pvwarp_autofunc,gensym("autofunc"),A_DEFFLOAT, A_DEFFLOAT,0); + pvwarp_class = c; + fftease_announce(OBJECT_NAME); +} + +void pvwarp_automate(t_pvwarp *x, t_floatarg state) +{ + x->automate = (short)state; +} + +void update_warp_function( t_pvwarp *x ) +{ + int i,j; + int N2 = x->fft->N2; + t_float *warpfunc = x->warpfunc; + t_float warpfac1 = x->warpfac1; + t_float warpfac2 = x->warpfac2; + t_float cf1 = x->cf1; + t_float cf2 = x->cf2; + t_float bw1 = x->bw1; + t_float bw2 = x->bw2; + t_float c_fundamental = x->fft->c_fundamental; + t_float deviation; + t_float diff; + int midbin, lobin, hibin ; + t_float hif, lof; + int bin_extent; + short verbose = x->verbose; + + for( i = 0; i < N2; i++ ){ + warpfunc[i] = 1.0; + } + hif = cf1 * (1. + bw1); + lof = cf1 * (1. - bw1); + midbin = freq_to_bin( cf1, c_fundamental ); + hibin = freq_to_bin( hif, c_fundamental ); + lobin = freq_to_bin( lof, c_fundamental ); + if( hibin >= N2 - 1 ){ + hibin = N2 - 1; + } + if( lobin < 0 ){ + lobin = 0; + } + if( verbose ) + post("bump1: hi %d mid %d lo %d",hibin,midbin,lobin); + + warpfunc[midbin] = warpfac1; + diff = warpfac1 - 1.0 ; + bin_extent = hibin - midbin ; + for( i = midbin, j = 0; i < hibin; i++, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + bin_extent = midbin - lobin ; + for( i = midbin, j = 0; i > lobin; i--, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + + // NOW DO SECOND BUMP + hif = cf2 * (1. + bw2); + lof = cf2 * (1. - bw2); + midbin = freq_to_bin( cf2, c_fundamental ); + hibin = freq_to_bin( hif, c_fundamental ); + lobin = freq_to_bin( lof, c_fundamental ); + if( hibin >= N2 - 1 ){ + hibin = N2 - 1; + } + if( lobin < 0 ){ + lobin = 0; + } + if( verbose ) + post("bump2: hi %d mid %d lo %d",hibin,midbin,lobin); + warpfunc[midbin] = warpfac2; + diff = warpfac2 - 1.0 ; + bin_extent = hibin - midbin ; + for( i = midbin, j = 0; i < hibin; i++, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + bin_extent = midbin - lobin ; + for( i = midbin, j = 0; i > lobin; i--, j++ ){ + deviation = diff * ((float)(bin_extent - j) / (float) bin_extent ); + warpfunc[ i ] += deviation ; + } + + x->please_update = 0; +} + +void pvwarp_autofunc(t_pvwarp *x, t_floatarg minval, t_floatarg maxval) +{ + int minpoints, maxpoints, segpoints, i; + int pointcount = 0; + t_float target, lastval; + t_float m1, m2; + int N2 = x->fft->N2; + t_float *warpfunc = x->warpfunc; + + minpoints = 0.05 * (float) N2; + maxpoints = 0.25 * (float) N2; + if( minval > 1000.0 || minval < .001 ){ + minval = 0.5; + } + if( maxval < 0.01 || maxval > 1000.0 ){ + minval = 2.0; + } + + lastval = fftease_randf(minval, maxval); + // post("automate: min %d max %d",minpoints, maxpoints); + while( pointcount < N2 ){ + target = fftease_randf(minval, maxval); + segpoints = minpoints + (rand() % (maxpoints-minpoints)); + if( pointcount + segpoints > N2 ){ + segpoints = N2 - pointcount; + } + for( i = 0; i < segpoints; i++ ){ + m2 = (float)i / (float) segpoints ; + m1 = 1.0 - m2; + warpfunc[ pointcount + i ] = m1 * lastval + m2 * target; + } + lastval = target; + pointcount += segpoints; + } +} + +void pvwarp_mute(t_pvwarp *x, t_floatarg state) +{ + x->mute = state; +} + +void pvwarp_free( t_pvwarp *x ){ + if(x->fft->initialized){ + free(x->warpfunc); + free(x->connections); + } + fftease_free(x->fft); + free(x->fft); +} + +void *pvwarp_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_fftease *fft; + t_pvwarp *x = (t_pvwarp *)pd_new(pvwarp_class); + for(i = 0; i < 9; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->lofreq = 0.0; + x->hifreq = 18000.0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void pvwarp_init(t_pvwarp *x) +{ + + t_fftease *fft = x->fft; + + fftease_init(fft); + srand(clock()); + x->please_update = 0; + x->verbose = 0; + x->bypass = 0; + x->mute = 0; + x->always_update = 0; + x->automate = 0; + x->warpfac1 = 1.0; + x->warpfac2 = 1.0; + x->funcoff = 0; + x->cf1 = 500.; + x->cf2 = 3000.; + x->bw1 = 0.2; + x->bw2 = 0.2; + x->connections = (short *) calloc(16, sizeof(short)); + x->warpfunc = (t_float *) calloc(fft->N2, sizeof(t_float)); + fftease_oscbank_setbins(fft,x->lofreq, x->hifreq); + update_warp_function(x); +} + +void pvwarp_bottomfreq(t_pvwarp *x, t_floatarg f) +{ + + if( f < 0 || f > x->fft->R / 2.0 ){ + error("%s: frequency %f out of range", OBJECT_NAME, f); + return; + } + x->lofreq = f; + fftease_oscbank_setbins(x->fft, x->lofreq, x->hifreq); +} + +void pvwarp_topfreq(t_pvwarp *x, t_floatarg f) +{ + if( f < x->lofreq || f > x->fft->R / 2.0 ){ + error("%s: frequency %f out of range", OBJECT_NAME, f); + return; + } + x->hifreq = f; + fftease_oscbank_setbins(x->fft, x->lofreq, x->hifreq); +} + +void do_pvwarp(t_pvwarp *x) +{ + t_fftease *fft = x->fft; + int lo_bin = fft->lo_bin; + int hi_bin = fft->hi_bin; + int chan, freq; + int funcoff = x->funcoff; + int N2 = fft->N2; + t_float *channel = fft->channel; + t_float *warpfunc = x->warpfunc; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + + for ( chan = lo_bin; chan < hi_bin; chan++ ) { + freq = (chan << 1) + 1; + channel[freq] *= warpfunc[(chan + funcoff) % N2]; + } + fftease_oscbank(fft); +} + +t_int *pvwarp_perform(t_int *w) +{ + int i,j; + + t_float f; + t_pvwarp *x = (t_pvwarp *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *in1 = (t_float *)(w[3]); + t_float *in2 = (t_float *)(w[4]); + t_float *in3 = (t_float *)(w[5]); + t_float *in4 = (t_float *)(w[6]); + t_float *in5 = (t_float *)(w[7]); + t_float *in6 = (t_float *)(w[8]); + t_float *in7 = (t_float *)(w[9]); + t_float *in8 = (t_float *)(w[10]); + t_float *in9 = (t_float *)(w[11]); + t_float *MSPOutputVector = (t_float *)(w[12]); + + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + int N2 = fft->N2; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+13; + } + + if(!x->automate) { + x->cf1 = *in1; + x->bw1 = *in2 ; + x->warpfac1 = *in3; + x->cf2 = *in4; + x->bw2 = *in5; + x->warpfac2 = *in6; + } + + + f = *in7 ; + if( f < 0 ) { + f = 0.0; + } else if (f > 1.0 ){ + f = 1.0; + } + x->funcoff = (int) (f * (float) (N2 - 1)); + fft->P = *in8 ; + fft->synt = *in9 ; + + if( (x->please_update || x->always_update) && ! x->automate){ + update_warp_function(x); + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_pvwarp(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_pvwarp(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_pvwarp(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+13; +} + + +int freq_to_bin( float target, float fundamental ){ + float lastf = 0.0; + float testf = 0.0; + int thebin = 0; + while( testf < target ){ + ++thebin; + lastf = testf; + testf += fundamental; + } + + if(fabs(target - testf) < fabs(target - lastf) ){ + return thebin; + } else { + return (thebin - 1); + } +} + +void pvwarp_dsp(t_pvwarp *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + pvwarp_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(pvwarp_perform, 12, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec, sp[5]->s_vec, sp[6]->s_vec, sp[7]->s_vec, + sp[8]->s_vec, sp[9]->s_vec, sp[10]->s_vec); + } +} diff --git a/externals/fftease/qsortE.c b/externals/fftease/qsortE.c new file mode 100644 index 000000000..1eba468fd --- /dev/null +++ b/externals/fftease/qsortE.c @@ -0,0 +1,241 @@ +/* Plug-compatible replacement for UNIX qsort. + Copyright (C) 1989 Free Software Foundation, Inc. + Written by Douglas C. Schmidt (schmidt@ics.uci.edu) + +This file is part of GNU CC. + +GNU QSORT 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. + +GNU QSORT 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 GNU QSORT; see the file COPYING. If not, write to +the Free the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: FSF 19.28. */ + +#ifdef sparc +#include <alloca.h> +#endif + +#include <stdlib.h> + +/* Invoke the comparison function, returns either 0, < 0, or > 0. */ +#define CMP(A,B) ((*cmp)((A),(B))) + +/* Byte-wise swap two items of size SIZE. */ +#define SWAP(A,B,SIZE) do {int sz = (SIZE); char *a = (A); char *b = (B); \ + do { char _temp = *a;*a++ = *b;*b++ = _temp;} while (--sz);} while (0) + +/* Copy SIZE bytes from item B to item A. */ +#define COPY(A,B,SIZE) {int sz = (SIZE); do { *(A)++ = *(B)++; } while (--sz); } + +/* This should be replaced by a standard ANSI macro. */ +#define BYTES_PER_WORD 8 + +/* The next 4 #defines implement a very fast in-line stack abstraction. */ +#define STACK_SIZE (BYTES_PER_WORD * sizeof (long)) +#define PUSH(LOW,HIGH) do {top->lo = LOW;top++->hi = HIGH;} while (0) +#define POP(LOW,HIGH) do {LOW = (--top)->lo;HIGH = top->hi;} while (0) +#define STACK_NOT_EMPTY (stack < top) + +/* Discontinue quicksort algorithm when partition gets below this size. + This particular magic number was chosen to work best on a Sun 4/260. */ +#define MAX_THRESH 4 + + +/* requisite prototype */ + +int qsortE (char *base_ptr, int total_elems, int size, int (*cmp)()); + + + +/* Stack node declarations used to store unfulfilled partition obligations. */ +typedef struct +{ + char *lo; + char *hi; + +} stack_node; + +/* Order size using quicksort. This implementation incorporates + four optimizations discussed in Sedgewick: + + 1. Non-recursive, using an explicit stack of pointer that store the + next array partition to sort. To save time, this maximum amount + of space required to store an array of MAX_INT is allocated on the + stack. Assuming a 32-bit integer, this needs only 32 * + sizeof (stack_node) == 136 bits. Pretty cheap, actually. + + 2. Choose the pivot element using a median-of-three decision tree. + This reduces the probability of selecting a bad pivot value and + eliminates certain extraneous comparisons. + + 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving + insertion sort to order the MAX_THRESH items within each partition. + This is a big win, since insertion sort is faster for small, mostly + sorted array segments. + + 4. The larger of the two sub-partitions is always pushed onto the + stack first, with the algorithm then concentrating on the + smaller partition. This *guarantees* no more than log (n) + stack size is needed (actually O(1) in this case)! */ + +int qsortE (char *base_ptr, int total_elems, int size, int (*cmp)()) +{ + /* Allocating SIZE bytes for a pivot buffer facilitates a better + algorithm below since we can do comparisons directly on the pivot. */ + char *pivot_buffer = (char *) malloc(size); + int max_thresh = MAX_THRESH * size; + + if (total_elems > MAX_THRESH) + { + char *lo = base_ptr; + char *hi = lo + size * (total_elems - 1); + stack_node stack[STACK_SIZE]; /* Largest size needed for 32-bit int!!! */ + stack_node *top = stack + 1; + + while (STACK_NOT_EMPTY) + { + char *left_ptr; + char *right_ptr; + { + char *pivot = pivot_buffer; + { + /* Select median value from among LO, MID, and HI. Rearrange + LO and HI so the three values are sorted. This lowers the + probability of picking a pathological pivot value and + skips a comparison for both the LEFT_PTR and RIGHT_PTR. */ + + char *mid = lo + size * ((hi - lo) / size >> 1); + + if (CMP (mid, lo) < 0) + SWAP (mid, lo, size); + if (CMP (hi, mid) < 0) + SWAP (mid, hi, size); + else + goto jump_over; + if (CMP (mid, lo) < 0) + SWAP (mid, lo, size); + jump_over: + COPY (pivot, mid, size); + pivot = pivot_buffer; + } + left_ptr = lo + size; + right_ptr = hi - size; + + /* Here's the famous ``collapse the walls'' section of quicksort. + Gotta like those tight inner loops! They are the main reason + that this algorithm runs much faster than others. */ + do + { + while (CMP (left_ptr, pivot) < 0) + left_ptr += size; + + while (CMP (pivot, right_ptr) < 0) + right_ptr -= size; + + if (left_ptr < right_ptr) + { + SWAP (left_ptr, right_ptr, size); + left_ptr += size; + right_ptr -= size; + } + else if (left_ptr == right_ptr) + { + left_ptr += size; + right_ptr -= size; + break; + } + } + while (left_ptr <= right_ptr); + + } + + /* Set up pointers for next iteration. First determine whether + left and right partitions are below the threshold size. If so, + ignore one or both. Otherwise, push the larger partition's + bounds on the stack and continue sorting the smaller one. */ + + if ((right_ptr - lo) <= max_thresh) + { + if ((hi - left_ptr) <= max_thresh) /* Ignore both small partitions. */ + POP (lo, hi); + else /* Ignore small left partition. */ + lo = left_ptr; + } + else if ((hi - left_ptr) <= max_thresh) /* Ignore small right partition. */ + hi = right_ptr; + else if ((right_ptr - lo) > (hi - left_ptr)) /* Push larger left partition indices. */ + { + PUSH (lo, right_ptr); + lo = left_ptr; + } + else /* Push larger right partition indices. */ + { + PUSH (left_ptr, hi); + hi = right_ptr; + } + } + } + + /* Once the BASE_PTR array is partially sorted by quicksort the rest + is completely sorted using insertion sort, since this is efficient + for partitions below MAX_THRESH size. BASE_PTR points to the beginning + of the array to sort, and END_PTR points at the very last element in + the array (*not* one beyond it!). */ + +#define MINQS(X,Y) ((X) < (Y) ? (X) : (Y)) + + { + char *end_ptr = base_ptr + size * (total_elems - 1); + char *run_ptr; + char *tmp_ptr = base_ptr; + char *thresh = MINQS (end_ptr, base_ptr + max_thresh); + + /* Find smallest element in first threshold and place it at the + array's beginning. This is the smallest array element, + and the operation speeds up insertion sort's inner loop. */ + + for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size) + if (CMP (run_ptr, tmp_ptr) < 0) + tmp_ptr = run_ptr; + + if (tmp_ptr != base_ptr) + SWAP (tmp_ptr, base_ptr, size); + + /* Insertion sort, running from left-hand-side up to `right-hand-side.' + Pretty much straight out of the original GNU qsort routine. */ + + for (run_ptr = base_ptr + size; (tmp_ptr = run_ptr += size) <= end_ptr; ) + { + + while (CMP (run_ptr, tmp_ptr -= size) < 0) + ; + + if ((tmp_ptr += size) != run_ptr) + { + char *trav; + + for (trav = run_ptr + size; --trav >= run_ptr;) + { + char c = *trav; + char *hi, *lo; + + for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo) + *hi = *lo; + *hi = c; + } + } + + } + } + return 1; +} diff --git a/externals/fftease/reanimator~.c b/externals/fftease/reanimator~.c new file mode 100644 index 000000000..2b2fb3d66 --- /dev/null +++ b/externals/fftease/reanimator~.c @@ -0,0 +1,548 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +#define THRESHOLD_MIN (.000001) + +static t_class *reanimator_class; + +#define OBJECT_NAME "reanimator~" + +typedef struct _reanimator +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float **framebank; + t_float *normalized_frame; + t_float current_frame; + int framecount; + t_float frame_increment ; + t_float last_frame ; + t_float fpos; + t_float last_fpos; + t_float tadv; + int readme; + int total_frames; + short mute; + short initialized; + t_float threshold; + short inverse; + int top_comparator_bin; + short reanimator_mode; + int matchframe; // current found frame + t_float sample_len; /*duration of texture sample */ + t_float sync; + int megs; +} t_reanimator; + +void reanimator_dsp(t_reanimator *x, t_signal **sp); +t_int *reanimator_perform(t_int *w); +void *reanimator_new(t_symbol *msg, short argc, t_atom *argv); +void reanimator_analyze (t_reanimator *x); +void reanimator_mute(t_reanimator *x, t_floatarg flag); +void reanimator_inverse(t_reanimator *x, t_floatarg toggle); +void reanimator_topbin(t_reanimator *x, t_floatarg bin); +void reanimator_startframe(t_reanimator *x, t_floatarg start); +void reanimator_endframe(t_reanimator *x, t_floatarg end); +void reanimator_framerange(t_reanimator *x, t_floatarg start, t_floatarg end); +void reanimator_size(t_reanimator *x, t_floatarg size_ms); +void reanimator_freeze_and_march(t_reanimator *x, t_floatarg f); +void reanimator_resume( t_reanimator *x ); +void reanimator_threshold(t_reanimator *x, t_floatarg threshold); +void reanimator_free( t_reanimator *x ); +void reanimator_framecount ( t_reanimator *x ); +void reanimator_init(t_reanimator *x); +void reanimator_transpose(t_reanimator *x, t_floatarg tf); +void reanimator_synthresh(t_reanimator *x, t_floatarg thresh); +void reanimator_oscbank(t_reanimator *x, t_floatarg flag); + +void reanimator_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("reanimator~"), (t_newmethod)reanimator_new, + (t_method)reanimator_free,sizeof(t_reanimator), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_reanimator, x_f); + class_addmethod(c,(t_method)reanimator_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)reanimator_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)reanimator_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)reanimator_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)reanimator_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)reanimator_inverse,gensym("inverse"), A_FLOAT, 0); + class_addmethod(c,(t_method)reanimator_topbin,gensym("topbin"), A_FLOAT, 0); + class_addmethod(c,(t_method)reanimator_threshold,gensym("threshold"), A_FLOAT, 0); + class_addmethod(c,(t_method)reanimator_analyze,gensym("analyze"), 0); + class_addmethod(c,(t_method)reanimator_framecount,gensym("framecount"), 0); + class_addmethod(c,(t_method)reanimator_freeze_and_march,gensym("freeze_and_march"), A_FLOAT, 0); + class_addmethod(c,(t_method)reanimator_resume,gensym("resume"), 0); + + reanimator_class = c; + fftease_announce(OBJECT_NAME); +} + +void reanimator_transpose(t_reanimator *x, t_floatarg tf) +{ + x->fft->P = (float) tf; +} + +void reanimator_synthresh(t_reanimator *x, t_floatarg thresh) +{ + x->fft->synt = (float) thresh; +} + +void reanimator_oscbank(t_reanimator *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void reanimator_framecount ( t_reanimator *x ) +{ + post("%d frames stored", x->total_frames); +} + +void reanimator_freeze_and_march(t_reanimator *x, t_floatarg f) +{ + x->frame_increment = f; + x->reanimator_mode = 1; +} + +void reanimator_resume( t_reanimator *x ) +{ + x->reanimator_mode = 0; +} + +void reanimator_free( t_reanimator *x ){ + int i; + if(x->fft->initialized){ + fftease_free(x->fft); + for(i = 0; i < x->framecount; i++){ + free(x->framebank[i]) ; + } + free((char**)x->framebank); + free(x->normalized_frame); + } +} + +void *reanimator_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft; + t_reanimator *x = (t_reanimator *)pd_new(reanimator_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->sample_len = 1000.0; + if(argc > 0){ x->sample_len = atom_getfloatarg(0, argc, argv); } + else { post("%s: must include duration argument",OBJECT_NAME); return NULL; } + x->sample_len *= .001; /* convert to seconds */ + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + return x; +} + +void reanimator_init(t_reanimator *x ) +{ + t_fftease *fft = x->fft; + t_float **framebank = x->framebank; + int framecount = x->framecount; + short initialized = fft->initialized; + + fftease_init(fft); + if(!fftease_msp_sanity_check(fft,OBJECT_NAME)){ + return; + } + // sanity check here + x->tadv = (float)fft->D/(float)fft->R; + x->current_frame = framecount = 0; + x->fpos = x->last_fpos = 0; + x->total_frames = x->sample_len / x->tadv; + + if(!initialized){ + x->sync = 0.0; + x->inverse = 0; + x->initialized = 0; // for perform + x->threshold = .0001; + x->top_comparator_bin = 10; + x->reanimator_mode = 0; + x->frame_increment = 1.0; + x->mute = 0; + x->readme = 0; + x->total_frames = x->sample_len / x->tadv; + x->framebank = (t_float **) calloc(x->total_frames, sizeof(t_float *)); + + while(framecount < x->total_frames ){ + x->framebank[framecount] = (t_float *) calloc((fft->N+2),sizeof(t_float)); + ++framecount; + } + + } + else if(initialized == 1){ + // danger: could be more frames this time!!! + while(framecount < x->total_frames ){ + x->framebank[framecount] = (t_float *) realloc(framebank[framecount], (fft->N+2) * sizeof(t_float)); + ++framecount; + } + } + + x->framecount = framecount; + x->megs = sizeof(t_float) * x->framecount * (fft->N+2); +} + +void do_reanimator(t_reanimator *x) +{ + t_float ampsum, new_ampsum, rescale; + t_float min_difsum, difsum; + int + i,j; + t_fftease *fft = x->fft; + + int framecount = x->framecount; + int total_frames = x->total_frames; + + float threshold = x->threshold; + int top_comparator_bin = x->top_comparator_bin ; + + t_float **framebank = x->framebank; + // for reanimator mode + t_float fframe = x->current_frame ; + t_float last_fpos = x->last_fpos ; + t_float fincr = x->frame_increment; + t_float fpos = x->fpos ; + t_float sync = x->sync; + t_float *channel = fft->channel; + t_float *output = fft->output; + int matchframe = x->matchframe; + int N = fft->N; + int D = fft->D; + float rescale_inv; + /***********************************/ + + if(total_frames <= 0) + return; + /* SAMPLE MODE */ + if( x->readme ) { + + + if( framecount >= total_frames ){ + sync = 1.0; + x->readme = 0; + post("reanimator~: data acquisition completed"); + x->initialized = 1; + // clear input buffer + for( i = 0; i < fft->Nw; i++ ){ + fft->input[i] = 0.0; + } + } else { + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + sync = (float) framecount / (float) total_frames; + + new_ampsum = ampsum = 0; + for(i = 0; i < N; i += 2 ){ + ampsum += channel[i]; + } + + if( ampsum > .000001 ){ + rescale = 1.0 / ampsum ; + + // use more efficient memcpy + for(i = 0; i < N; i++){ + framebank[framecount][i] = channel[i]; + } + for( i = 0; i < N; i += 2 ){ + framebank[framecount][i] *= rescale; + } + ++framecount; + + } else { + post("amplitude for frame %d is too low\n", framecount); + } + } + + } /* reanimator RESYNTHESIS */ + else if(x->reanimator_mode) { + if( fpos < 0 ) + fpos = 0; + if( fpos > 1 ) + fpos = 1; + if( fpos != last_fpos ){ + fframe = fpos * (float) framecount ; + last_fpos = fpos; + } + + + fframe += fincr; + while( fframe >= framecount ) { + fframe -= framecount; + } + while( fframe < 0. ) { + fframe += framecount ; + } + matchframe = (int) fframe; + + // use memcopy + for(i = 0; i < N; i++){ + channel[i] = framebank[matchframe][i]; + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } + + + } + /* REANIMATION HERE */ + else { + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + ampsum = 0; + // NORMALIZE INPUT FRAME + for( i = 0; i < N; i += 2 ){ + ampsum += channel[i]; + } + + if( ampsum > threshold ){ + rescale = 1.0 / ampsum; + for( i = 0; i < N; i += 2 ){ + channel[i] *= rescale; + } + } + else { + // AMPLITUDE OF INPUT WAS TOO LOW - OUTPUT SILENCE AND RETURN + for (i = 0; i < D; i++ ){ + output[i] = 0.0; + } + matchframe = 0; + x->current_frame = fframe; + x->frame_increment = fincr; + x->fpos = fpos; + x->sync = sync; + x->framecount = framecount; + x->matchframe = matchframe; + return; + + } + // NOW COMPARE TO STORED FRAMES + if( x->inverse ){ // INVERSE CASE + min_difsum = 0.0 ; + + for( j = 0; j < framecount; j++ ){ + difsum = 0; + for( i = 0; i < top_comparator_bin * 2; i += 2 ){ + difsum += fabs( channel[i] - framebank[j][i] ); + } + // fprintf(stderr,"bin 20: in %f compare %f\n", channel[40], frames[j][40]); + if( difsum > min_difsum ){ + matchframe = j; + min_difsum = difsum; + } + } + } else { // NORMAL CASE + min_difsum = 1000000.0 ; + + for( j = 0; j < framecount; j++ ){ + difsum = 0; + for( i = 0; i < top_comparator_bin * 2; i += 2 ){ + difsum += fabs( channel[i] - framebank[j][i] ); + } + // fprintf(stderr,"bin 20: in %f compare %f\n", channel[40], frames[j][40]); + if( difsum < min_difsum ){ + matchframe = j; + min_difsum = difsum; + } + } + } + // use memcopy + for(i = 0; i < N; i++){ + channel[i] = framebank[matchframe][i]; + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } + + // scale back to match + rescale_inv = 1.0 / rescale; + for (i = 0; i < D; i++){ + output[i] *= rescale_inv; + } + } + + /* restore state variables */ + x->current_frame = fframe; + x->frame_increment = fincr; + x->fpos = fpos; + x->sync = sync; + x->framecount = framecount; + x->matchframe = matchframe; +} + + +t_int *reanimator_perform(t_int *w) +{ + int i,j; + + ////////////////////////////////////////////// + t_reanimator *x = (t_reanimator *) (w[1]); + t_float *driver = (t_float *)(w[2]); // was driver + t_float *texture = (t_float *)(w[3]); + t_float *MSPOutputVector = (t_float *)(w[4]); // was soundout + t_float *matchout = (t_float *)(w[5]); + t_float *sync_vec = (t_float *)(w[6]); + + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + /***********************************/ + if(x->mute || ! x->initialized){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+7; + } + + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + if(x->readme){ + memcpy(input + (Nw - D), texture, D * sizeof(t_float)); + } else { + memcpy(input + (Nw - D), driver, D * sizeof(t_float)); + } + do_reanimator(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + if(x->readme){ + memcpy(input + (Nw - D), texture + (D * i), D * sizeof(float)); + } else { + memcpy(input + (Nw - D), driver + (D * i), D * sizeof(float)); + } + do_reanimator(x); + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + if(x->readme){ + memcpy(internalInputVector + (operationCount * MSPVectorSize), texture, MSPVectorSize * sizeof(float)); + + } else { + + memcpy(internalInputVector + (operationCount * MSPVectorSize), driver, MSPVectorSize * sizeof(float)); + } + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + do_reanimator( x ); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + // now load other output buffers + for(i = 0; i < MSPVectorSize; i++){ + matchout[i] = x->matchframe; + sync_vec[i] = x->sync; + } + return w+7; +} + +void reanimator_analyze ( t_reanimator *x ) +{ + x->readme = 1; + x->initialized = 1; + x->framecount = 0; + post("reanimator: beginning spectral data acquisition"); + return; + +} + +void reanimator_mute(t_reanimator *x, t_floatarg flag) +{ + x->mute = (short)flag; +} +void reanimator_topbin(t_reanimator *x, t_floatarg bin) +{ + if( bin > 1 && bin < x->fft->N2 ) + x->top_comparator_bin = bin; +} + + +void reanimator_inverse(t_reanimator *x, t_floatarg toggle) +{ + x->inverse = (short)toggle; +} + +void reanimator_threshold(t_reanimator *x, t_floatarg threshold) +{ + if( threshold > THRESHOLD_MIN ) + x->threshold = threshold; + else + x->threshold = THRESHOLD_MIN; +} + +void reanimator_dsp(t_reanimator *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + reanimator_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(reanimator_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec,sp[4]->s_vec); + } +} diff --git a/externals/fftease/resent~.c b/externals/fftease/resent~.c new file mode 100644 index 000000000..e84428e7e --- /dev/null +++ b/externals/fftease/resent~.c @@ -0,0 +1,669 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *resent_class; + +#define OBJECT_NAME "resent~" + + +typedef struct _resent +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float *frame_incr; + t_float *store_incr; + t_float *frame_phase; + t_float frameloc; + t_float **loveboat; + t_float current_frame; + long framecount; + long last_framecount; + t_float frame_increment ; + t_float fpos; + t_float last_fpos; + t_float tadv; + int read_me; + long frames_read; + short mute; + void *m_clock; + void *m_bang; + short playthrough; + short lock; + t_float duration; + t_float sync; + long interpolation_attr; +} t_resent; + +void resent_dsp(t_resent *x, t_signal **sp); +t_int *resent_perform(t_int *w); +void *resent_new(t_symbol *msg, short argc, t_atom *argv); +void resent_assist(t_resent *x, void *b, long m, long a, char *s); +void resent_acquire_sample (t_resent *x) ; +void resent_mute(t_resent *x, t_floatarg tog); +void resent_bin(t_resent *x, t_floatarg fbin, t_floatarg speed); +void resent_setphase(t_resent *x, t_floatarg phase); +void resent_addphase(t_resent *x, t_floatarg phase); +void resent_setspeed( t_resent *x, t_floatarg speed ); +void resent_addspeed( t_resent *x, t_floatarg speed ); +void resent_size( t_resent *x, t_floatarg size_ms ); +void resent_free( t_resent *x ); +void resent_store_incr( t_resent *x ); +void resent_setspeed_and_phase( t_resent *x, t_floatarg speed, t_floatarg phase ); +void resent_tick(t_resent *x); +void resent_fftinfo(t_resent *x); +void resent_init(t_resent *x); +void resent_linephase(t_resent *x, t_symbol *msg, short argc, t_atom *argv); +void resent_linespeed(t_resent *x, t_symbol *msg, short argc, t_atom *argv); +void resent_randphase(t_resent *x, t_symbol *msg, short argc, t_atom *argv); +void resent_randspeed(t_resent *x, t_symbol *msg, short argc, t_atom *argv); +void resent_playthrough(t_resent *x, t_floatarg state); +void resent_interpolation(t_resent *x, t_floatarg tog); +t_float fftease_randf(t_float min, t_float max); +void resent_transpose(t_resent *x, t_floatarg tf); +void resent_synthresh(t_resent *x, t_floatarg thresh); +void resent_oscbank(t_resent *x, t_floatarg flag); + +void resent_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("resent~"), (t_newmethod)resent_new, + (t_method)resent_free,sizeof(t_resent), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_resent, x_f); + class_addmethod(c,(t_method)resent_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)resent_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)resent_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)resent_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)resent_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)resent_acquire_sample,gensym("acquire_sample"), 0); + class_addmethod(c,(t_method)resent_linespeed, gensym("linespeed"), A_GIMME, 0); + class_addmethod(c,(t_method)resent_linephase, gensym("linephase"), A_GIMME, 0); + class_addmethod(c,(t_method)resent_randspeed, gensym("randspeed"), A_GIMME, 0); + class_addmethod(c,(t_method)resent_randphase, gensym("randphase"), A_GIMME, 0); + class_addmethod(c,(t_method)resent_bin, gensym("bin"), A_FLOAT, A_FLOAT, 0); + class_addmethod(c,(t_method)resent_setphase, gensym("setphase"), A_FLOAT, 0); + class_addmethod(c,(t_method)resent_addphase, gensym("addphase"), A_FLOAT, 0); + class_addmethod(c,(t_method)resent_setspeed, gensym("setspeed"), A_FLOAT, 0); + class_addmethod(c,(t_method)resent_addspeed, gensym("addspeed"), A_FLOAT, 0); + class_addmethod(c,(t_method)resent_playthrough, gensym("playthrough"), A_DEFFLOAT, 0); + class_addmethod(c,(t_method)resent_store_incr, gensym("store_incr"),0); + class_addmethod(c,(t_method)resent_setspeed_and_phase, gensym("setspeed_and_phase"), A_FLOAT, A_FLOAT, 0); + class_addmethod(c,(t_method)resent_interpolation, gensym("interpolation"), A_FLOAT, 0); + resent_class = c; + fftease_announce(OBJECT_NAME); +} + +void resent_transpose(t_resent *x, t_floatarg tf) +{ + x->fft->P = tf; +} + +void resent_synthresh(t_resent *x, t_floatarg thresh) +{ + x->fft->synt = thresh; +} + +void resent_oscbank(t_resent *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void resent_store_incr(t_resent *x) +{ + t_fftease *fft = x->fft; + + int i; + t_float *store_incr = x->store_incr; + t_float *frame_incr = x->frame_incr; + + for(i = 0; i < fft->N2; i++){ + store_incr[i] = frame_incr[i]; + } +} + +void resent_free(t_resent *x){ + int i ; + + if(x->fft->initialized){ + for(i = 0; i < x->framecount; i++){ + free(x->loveboat[i]) ; + } + free(x->loveboat); + free(x->frame_phase); + free(x->frame_incr); + free(x->store_incr); + } + fftease_free(x->fft); + free(x->fft); +} + +void resent_bin(t_resent *x, t_floatarg fbin, t_floatarg speed) +{ + t_fftease *fft = x->fft; + + int bin_num = (int) fbin; + + if(bin_num >= 0 && bin_num < fft->N2){ + x->frame_incr[bin_num] = speed ; + } else { + post("resent~: bin %d is out of range", bin_num); + } +} + +void resent_setphase( t_resent *x, t_floatarg phase) +{ + t_fftease *fft = x->fft; + + t_float scaled_phase; + int i; + + if( phase < 0. ) + phase = 0. ; + if( phase > 1. ) + phase = 1.; + scaled_phase = phase * (float) x->framecount ; + for( i = 0; i < fft->N2; i++ ){ + x->frame_phase[i] = scaled_phase ; + } + +} + +void resent_addphase( t_resent *x, t_floatarg phase ) +{ + t_fftease *fft = x->fft; + + t_float scaled_phase ; + t_float *frame_phase = x->frame_phase; + int framecount = x->framecount; + int i; + + + if( phase < 0. ) + phase = 0. ; + if( phase > 1. ) + phase = 1.; + scaled_phase = phase * (float) framecount ; + for( i = 0; i < fft->N2; i++ ){ + frame_phase[i] += scaled_phase ; + while( frame_phase[i] < 0 ) + frame_phase[i] += framecount; + while( frame_phase[i] > framecount - 1 ) + frame_phase[i] -= framecount ; + } + + +} + +void resent_setspeed( t_resent *x, t_floatarg speed ) +{ + t_fftease *fft = x->fft; + if(! x->fft->init_status) + return; + + int i; + + for( i = 0; i < fft->N2; i++ ){ + + x->frame_incr[i] = speed ; + } + // post("speed reset to %f",speed); +} + +void resent_addspeed( t_resent *x, t_floatarg speed ) +{ + t_fftease *fft = x->fft; + + int i; + t_float *store_incr = x->store_incr; + t_float *frame_incr = x->frame_incr; + + for( i = 0; i < fft->N2; i++ ){ + frame_incr[i] = store_incr[i] + speed ; + } +} + +void resent_interpolation( t_resent *x, t_floatarg tog ) +{ + x->interpolation_attr = (int) tog; +} + +void resent_setspeed_and_phase( t_resent *x, t_floatarg speed, t_floatarg phase ) +{ + t_fftease *fft = x->fft; + + t_float scaled_phase; + int i; + if( phase < 0. ) + phase = 0. ; + if( phase > 1. ) + phase = 1.; + + scaled_phase = phase * (t_float) x->framecount ; + for( i = 0; i < fft->N2; i++ ){ + x->frame_phase[i] = scaled_phase ; + x->frame_incr[i] = speed ; + } + // post("ssap: speed reset to %f, phase reset to %f",speed,phase); + +} + +void resent_assist (t_resent *x, void *b, long msg, long arg, char *dst) +{ + if (msg==1) { + switch (arg) { + case 0: + sprintf(dst,"(signal/bang) Input, Sample Trigger"); + break; + } + } else if (msg==2) { + switch( arg){ + case 0: + sprintf(dst,"(signal) Output "); + break; + case 1: + sprintf(dst,"(signal) Recording Sync"); + break; + } + + } +} + +void resent_tick(t_resent *x) { + outlet_bang(x->m_bang); +} + +void resent_init(t_resent *x) +{ + int i; + short initialized = x->fft->initialized; + t_fftease *fft = x->fft; + fftease_init(fft); + if(!fftease_msp_sanity_check(fft,OBJECT_NAME)){ + return; + } + + x->current_frame = x->framecount = 0; + x->fpos = x->last_fpos = 0; + x->tadv = (float)fft->D/(float)fft->R; + if(x->duration < 0.1){ + x->duration = 0.1; + } + x->framecount = x->duration/x->tadv ; + x->read_me = 0; + + if(! initialized ){ + x->frame_increment = 1.0 ; + x->mute = 0; + x->playthrough = 0; + x->sync = 0; + x->frames_read = 0; + x->frame_incr = (t_float *) calloc(fft->N2, sizeof(t_float)); + x->store_incr = (t_float *) calloc(fft->N2, sizeof(t_float)); + x->frame_phase = (t_float *) calloc(fft->N2, sizeof(t_float)); + x->loveboat = (t_float **) calloc(x->framecount, sizeof(t_float *)); + for(i=0; i < x->framecount; i++){ + x->loveboat[i] = (t_float *) calloc((fft->N+2), sizeof(t_float)); + if(x->loveboat[i] == NULL){ + error("%s: Insufficient Memory!",OBJECT_NAME); + return; + } + } + } + else { /* this could fail or might not actually release memory - test it!! */ + x->frame_incr = (t_float *) realloc(x->frame_incr, fft->N2 * sizeof(t_float)); + x->store_incr = (t_float *) realloc(x->store_incr, fft->N2 * sizeof(t_float)); + x->frame_phase = (t_float *) realloc(x->frame_phase, fft->N2 * sizeof(t_float)); + + for(i = 0; i < x->last_framecount; i++){ + free(x->loveboat[i]) ; + } + x->loveboat = (t_float **)realloc(x->loveboat, x->framecount * sizeof(t_float*)); + for(i=0; i < x->framecount; i++){ + x->loveboat[i] = (t_float *) calloc((fft->N+2), sizeof(t_float)); + if(x->loveboat[i] == NULL){ + error("%s: Insufficient Memory!",OBJECT_NAME); + return; + } + } + } + x->last_framecount = x->framecount; +} + +void *resent_new(t_symbol *msg, short argc, t_atom *argv) +{ +t_fftease *fft; + t_resent *x = (t_resent *)pd_new(resent_class); + + + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1, sizeof(t_fftease) ); + fft = x->fft; + fft->initialized = 0; + + srand(clock()); // needed ? + x->interpolation_attr = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ x->duration = atom_getfloatarg(0, argc, argv) / 1000.0; } + else { post("%s: must give duration argument",OBJECT_NAME); return NULL; } + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + return x; +} + +void do_resent(t_resent *x) +{ + t_fftease *fft = x->fft; + + int iphase, amp, freq, i; + int N = fft->N; + int N2 = fft->N2; + t_float fframe = x->current_frame ; + t_float last_fpos = x->last_fpos ; + int framecount = x->framecount; + t_float *frame_incr = x->frame_incr; + t_float *frame_phase = x->frame_phase; + t_float *channel = fft->channel; + t_float frak; + long iphase1, iphase2; + + if(x->read_me && x->framecount > 0){ + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + // use memcopy + for(i = 0; i < N; i++){ + x->loveboat[x->frames_read][i] = channel[i]; + } + x->frames_read++; + if(x->frames_read >= x->framecount){ + x->read_me = 0; + // post("sample acquisition completed"); + } + x->sync = (t_float) x->frames_read / (t_float) x->framecount; + } + else { + if(x->interpolation_attr == 1){ + for( i = 0 ; i < N2; i++ ){ + amp = i<<1; + freq = amp + 1; + iphase1 = floor( frame_phase[i] ); + frak = frame_phase[i] - iphase1; + if( iphase1 < 0 ) + iphase1 = 0; + if( iphase1 > framecount - 1 ) + iphase1 = framecount - 1; + iphase2 = (iphase1 + 1) % framecount; + channel[amp] = x->loveboat[iphase1][amp] + (frak * + (x->loveboat[iphase2][amp] - x->loveboat[iphase1][amp])); + channel[freq] = x->loveboat[iphase1][freq] + (frak * + (x->loveboat[iphase2][freq] - x->loveboat[iphase1][freq])); + frame_phase[i] += frame_incr[i] ; + while( frame_phase[i] > framecount - 1) + frame_phase[i] -= framecount; + while( frame_phase[i] < 0. ) + frame_phase[i] += framecount; + } + } + else { + for( i = 0 ; i < N2; i++ ){ + amp = i<<1; + freq = amp + 1 ; + iphase = frame_phase[i]; + if( iphase < 0 ) + iphase = 0; + if( iphase > framecount - 1 ) + iphase = framecount - 1; + channel[amp] = x->loveboat[iphase][amp]; + channel[freq] = x->loveboat[iphase][freq]; + frame_phase[i] += frame_incr[i] ; + while( frame_phase[i] > framecount - 1) + frame_phase[i] -= framecount; + while( frame_phase[i] < 0. ) + frame_phase[i] += framecount; + } + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } + } + + /* restore state variables */ + + x->current_frame = fframe; + x->last_fpos = last_fpos; + +} + +t_int *resent_perform(t_int *w) +{ + int i, j; + ////////////////////////////////////////////// + t_resent *x = (t_resent *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_float *sync_vec = (t_float *)(w[4]); + + /* dereference structure */ + + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + for(i=0; i < MSPVectorSize; i++){ sync_vec[i] = 0.0; } + return w+5; + } + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + if(x->playthrough && x->read_me){ + for (i = 0; i < MSPVectorSize; i++) { + MSPOutputVector[i] = MSPInputVector[i] * 0.5; // scale down + } + for(i=0; i < MSPVectorSize; i++){ sync_vec[i] = 0.0; } + return w+5; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_resent(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_resent(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_resent(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + for ( i = 0; i < MSPVectorSize; i++ ){ + sync_vec[i] = x->sync; + } + return w+5; +} + +void resent_acquire_sample(t_resent *x) +{ + x->read_me = 1; + x->frames_read = 0; + return; +} + +void resent_mute(t_resent *x, t_floatarg tog) +{ + x->mute = tog; +} + +void resent_playthrough(t_resent *x, t_floatarg state) +{ + x->playthrough = state; +} + +void resent_linephase(t_resent *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft = x->fft; + int bin1, bin2; + float phase1, phase2, bindiff; + int i; + float m1, m2; + + bin1 = (int) atom_getfloatarg(0, argc, argv); + phase1 = atom_getfloatarg(1, argc, argv) * x->framecount; + bin2 = (int) atom_getfloatarg(2, argc, argv); + phase2 = atom_getfloatarg(3, argc, argv) * x->framecount; + + if( bin1 > fft->N2 || bin2 > fft->N2 ){ + error("too high bin number"); + return; + } + bindiff = bin2 - bin1; + if( bindiff < 1 ){ + error("make bin2 higher than bin 1, bye now"); + return; + } + for( i = bin1; i < bin2; i++ ){ + m2 = (float) i / bindiff; + m1 = 1. - m2; + x->frame_phase[i] = m1 * phase1 + m2 * phase2; + } +} + +void resent_randphase(t_resent *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft = x->fft; + + float minphase, maxphase; + int i; + int framecount = x->framecount; + + minphase = atom_getfloatarg(0, argc, argv); + maxphase = atom_getfloatarg(1, argc, argv); + + // post("minphase %f maxphase %f",minphase, maxphase); + if(minphase < 0.0) + minphase = 0.0; + if( maxphase > 1.0 ) + maxphase = 1.0; + + for( i = 0; i < fft->N2; i++ ){ + x->frame_phase[i] = (int) (fftease_randf( minphase, maxphase ) * (float) (framecount - 1) ) ; + } +} + +void resent_randspeed(t_resent *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft = x->fft; + + float minspeed, maxspeed; + int i; + + + minspeed = atom_getfloatarg(0, argc, argv); + maxspeed = atom_getfloatarg(1, argc, argv); + + for( i = 0; i < fft->N2; i++ ){ + x->frame_incr[i] = fftease_randf(minspeed, maxspeed); + } +} + +void resent_linespeed(t_resent *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft = x->fft; + int bin1, bin2; + float speed1, speed2, bindiff; + int i; + float m1, m2; + + bin1 = (int) atom_getfloatarg(0, argc, argv); + speed1 = atom_getfloatarg(1, argc, argv); + bin2 = (int) atom_getfloatarg(2, argc, argv); + speed2 = atom_getfloatarg(3, argc, argv); + + if( bin1 > fft->N2 || bin2 > fft->N2 ){ + error("too high bin number"); + return; + } + bindiff = bin2 - bin1; + if( bindiff < 1 ){ + error("make bin2 higher than bin 1, bye now"); + return; + } + for( i = bin1; i < bin2; i++ ){ + m2 = (float) i / bindiff; + m1 = 1. - m2; + x->frame_incr[i] = m1 * speed1 + m2 * speed2; + } +} + +void resent_dsp(t_resent *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + resent_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(resent_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} diff --git a/externals/fftease/residency_buffer~.c b/externals/fftease/residency_buffer~.c new file mode 100644 index 000000000..b13b9630a --- /dev/null +++ b/externals/fftease/residency_buffer~.c @@ -0,0 +1,471 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *residency_buffer_class; + +#define OBJECT_NAME "residency_buffer~" + +typedef struct _residency_buffer +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + long b_frames; + long b_valid; + t_float *b_samples; + t_float current_frame; + int framecount; + // + t_float frame_increment ; + t_float fpos; + t_float last_fpos; + t_float tadv; + long read_me; + long frames_read; + long MAXFRAMES; + short mute; + long buffer_frame_count; + short initialized; + short playthrough; + t_float sync; + short buffer_is_hosed; + long interpolation_attr; + t_symbol *buffername; + void *size_outlet; // will send desired size in samples + +} t_residency_buffer; + +void residency_buffer_dsp(t_residency_buffer *x, t_signal **sp); +t_int *residency_buffer_perform(t_int *w); +void *residency_buffer_new(t_symbol *msg, short argc, t_atom *argv); +void residency_buffer_acquire_sample ( t_residency_buffer *x ) ; +void residency_buffer_meminfo( t_residency_buffer *x ) ; +void residency_buffer_mute(t_residency_buffer *x, t_floatarg toggle); +void residency_buffer_interpolation(t_residency_buffer *x, t_floatarg toggle); +void residency_buffer_calcbuf(t_residency_buffer *x, t_floatarg desired_duration); +void residency_buffer_free( t_residency_buffer *x ); +void residency_buffer_playthrough(t_residency_buffer *x, t_floatarg f); +void residency_buffer_init(t_residency_buffer *x); +void residency_buffer_transpose(t_residency_buffer *x, t_floatarg tf); +void residency_buffer_synthresh(t_residency_buffer *x, t_floatarg thresh); +void residency_buffer_oscbank(t_residency_buffer *x, t_floatarg flag); +void residency_buffer_attachbuf(t_residency_buffer *x); +void residency_buffer_redraw(t_residency_buffer *x); + +void residency_buffer_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("residency_buffer~"), (t_newmethod)residency_buffer_new, + (t_method)residency_buffer_free,sizeof(t_residency_buffer), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_residency_buffer, x_f); + class_addmethod(c,(t_method)residency_buffer_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)residency_buffer_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_buffer_interpolation,gensym("interpolation"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_buffer_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_buffer_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_buffer_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_buffer_calcbuf,gensym("calcbuf"), A_FLOAT, 0); + class_addmethod(c,(t_method)residency_buffer_playthrough,gensym("playthrough"), A_FLOAT, 0); + class_addmethod(c,(t_method)residency_buffer_acquire_sample,gensym("acquire_sample"), 0); + residency_buffer_class = c; + fftease_announce(OBJECT_NAME); +} + +void residency_buffer_free( t_residency_buffer *x ) +{ + fftease_free(x->fft); + free(x->fft); +} + +void residency_buffer_calcbuf(t_residency_buffer *x, t_floatarg desired_duration) +{ + t_float ms_calc; + t_float seconds; + t_float frames; + t_float samples; + t_float tadv = x->tadv; + t_fftease *fft = x->fft; + + if(tadv == 0){ + post("zero tadv!"); + return; + } + if(fft->R == 0){ + post("zero sampling rate!"); + return; + } + seconds = desired_duration / 1000.0; + frames = seconds / tadv; + samples = frames * (t_float) (fft->N + 2); + ms_calc = (samples / fft->R) * 1000.0; + post("desired duration in ms: %f",desired_duration); + post("you need %.0f samples in buffer to get %.0f frames or %f secs", + samples, frames, seconds); + outlet_float(x->size_outlet, samples); + +} + +void *residency_buffer_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_residency_buffer *x = (t_residency_buffer *)pd_new(residency_buffer_class); + t_fftease *fft; + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->size_outlet = outlet_new(&x->x_obj, gensym("float")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ x->buffername = atom_getsymbolarg(0, argc, argv); } + else { post("%s: Must specify array name", OBJECT_NAME); return NULL; } + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + return x; +} + +void residency_buffer_init(t_residency_buffer *x) +{ + + t_fftease *fft = x->fft; + short initialized = x->fft->initialized; + if( fft->R <= 0 ){ + post("bad SR"); + return; + } + if( fft->MSPVectorSize <= 0 ){ + post("bad vectorsize"); + return; + } + fftease_init(fft); + x->tadv = (t_float)fft->D / (t_float)fft->R; + if(!initialized){ + x->mute = 0; + x->sync = 0; + x->initialized = 1; + x->current_frame = x->framecount = 0; + x->frame_increment = 1.0 ; + x->fpos = x->last_fpos = 0; + } +} + +void do_residency_buffer(t_residency_buffer *x) +{ + t_fftease *fft = x->fft; + int N = x->fft->N; + int i,j,k; + t_float fframe = x->current_frame ; + t_float fincr = x->frame_increment; + t_float fpos = x->fpos; + t_float last_fpos = x->last_fpos ; + t_float *channel = fft->channel; + float *b_samples; + long b_frames = x->b_frames; + long b_valid = x->b_valid; + int frames_read = x->frames_read; + long index_offset; + long buffer_frame_count = x->buffer_frame_count; + long index1, index2; + t_float frak; + + residency_buffer_attachbuf(x); + b_samples = x->b_samples; + b_frames = x->b_frames; + + buffer_frame_count = (int)((t_float) b_frames / (t_float)(x->fft->N + 2)); + if(b_frames < 1 || ! b_valid){ + post("%s: table too small or not valid",OBJECT_NAME); + return; + } + if( x->read_me ) { + fftease_fold(fft); + fftease_rdft(fft, FFT_FORWARD); + fftease_convert(fft); + + index_offset = (N+2) * frames_read; + + for(i = index_offset, j = 0; i < index_offset + N + 2; i++, j++){ + if(i >= b_frames){ + + post("hit end of buffer on frame %d", frames_read); + goto escape; + } + b_samples[i] = channel[j]; + } + + ++frames_read; + x->sync = (t_float)frames_read/(t_float)(buffer_frame_count); + + if( frames_read >= buffer_frame_count){ + x->read_me = 0; + fpos = 0.0; + residency_buffer_redraw(x); + } + + } + else { + if( fpos < 0 ) + fpos = 0; + if( fpos > 1 ) + fpos = 1; + if( fpos != last_fpos ){ + fframe = fpos * (t_float) buffer_frame_count; + last_fpos = fpos; + } + + fframe += fincr; + // post("fframe %f framecount %d", fframe, buffer_frame_count); + + while(fframe >= buffer_frame_count) { + fframe -= buffer_frame_count; + } + while( fframe < 0. ) { + fframe += buffer_frame_count; + } + // goto escape; + + if(x->interpolation_attr == 1){ + long iframe = floor(fframe); + index1 = (N+2) * iframe; + index2 = (N+2) * ((iframe + 1) % buffer_frame_count); + frak = fframe - iframe; + for( i = index1, j = index2, k = 0; i < index1 + N + 2; i++, j++, k++){ + if(i >= b_frames || j >= b_frames){ + post("hit end of buffer on frame %d, index %d %d", index1,i,j); + goto escape; + } + channel[k] = b_samples[i] + frak * (b_samples[j] - b_samples[i]); + } + } + else { + index_offset = (N+2) * (long) fframe; + for( i = index_offset, j = 0; i < index_offset + N + 2; i++, j++ ){ + if(i >= b_frames){ + post("hit end of buffer on frame %d, index %d", index_offset,i); + goto escape; + } + channel[j] = b_samples[i]; + } + } + x->sync = fframe / (t_float) buffer_frame_count; + // REPLACE loveboat with buffer + if(fft->obank_flag){ + fftease_oscbank(fft); + } + else { + fftease_unconvert(fft); + fftease_rdft(fft, FFT_INVERSE); + fftease_overlapadd(fft); + } + + } +escape: + ; + /* restore state variables */ + x->current_frame = fframe; + x->frame_increment = fincr; + x->fpos = fpos; + x->last_fpos = last_fpos; + x->frames_read = frames_read; +} + + +void residency_buffer_redraw(t_residency_buffer *x) +{ + t_garray *a; + if (!(a = (t_garray *)pd_findbyclass(x->buffername, garray_class))) { + if (*x->buffername->s_name) pd_error(x, "function~: %s: no such array", x->buffername->s_name); + } + else { + garray_redraw(a); + } +} + +void residency_buffer_attachbuf(t_residency_buffer *x) +{ + int frames; + t_symbol *buffername = x->buffername; + t_garray *a; + + x->b_frames = 0; + x->b_valid = 0; + if (!(a = (t_garray *)pd_findbyclass(buffername, garray_class))) + { + if (*buffername->s_name) pd_error(x, "player~: %s: no such array", + buffername->s_name); + } + else if (!garray_getfloatarray(a, &frames, &x->b_samples)) + { + pd_error(x, "%s: bad template for player~", buffername->s_name); + } + else { + x->b_frames = frames; + x->b_valid = 1; + garray_usedindsp(a); + } +} + +t_int *residency_buffer_perform(t_int *w) +{ + int i, j; + + ////////////////////////////////////////////// + t_residency_buffer *x = (t_residency_buffer *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *increment = (t_float *)(w[3]); + t_float *position = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_float *vec_sync = (t_float *)(w[6]); + t_fftease *fft = x->fft; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + float mult = fft->mult; + + + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + + residency_buffer_attachbuf(x); + /* quit before doing anything unless we're good to go */ + + if( x->mute || ! x->b_valid) { + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + for(i=0; i < MSPVectorSize; i++){ vec_sync[i] = 0.0; } + return w+7; + } + + x->frame_increment = *increment; + x->fpos = *position; + + for ( i = 0; i < MSPVectorSize; i++ ){ + vec_sync[i] = x->sync; + } + if(x->framecount > 0 && x->read_me ){ + x->sync = (t_float)x->frames_read/(t_float)x->framecount; + } + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_residency_buffer(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_residency_buffer(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_residency_buffer(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void residency_buffer_acquire_sample ( t_residency_buffer *x ) +{ + residency_buffer_attachbuf(x); + x->read_me = 1; + x->frames_read = 0; + x->buffer_frame_count = (int)((t_float) (x->b_frames) / (t_float)(x->fft->N + 2)); + post("storing %d FFT frames", x->buffer_frame_count); + post("%s: beginning spectral data acquisition",OBJECT_NAME); + return; + +} + +void residency_buffer_mute(t_residency_buffer *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void residency_buffer_interpolation(t_residency_buffer *x, t_floatarg toggle) +{ + x->interpolation_attr = (short)toggle; +} + +void residency_buffer_playthrough(t_residency_buffer *x, t_floatarg toggle) +{ + x->playthrough = (short)toggle; +} + + +void residency_buffer_transpose(t_residency_buffer *x, t_floatarg tf) +{ + x->fft->P = (float) tf; +} + +void residency_buffer_synthresh(t_residency_buffer *x, t_floatarg thresh) +{ + x->fft->synt = (float) thresh; +} + +void residency_buffer_oscbank(t_residency_buffer *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void residency_buffer_dsp(t_residency_buffer *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + residency_buffer_init(x); + } + + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(residency_buffer_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec); + } +} diff --git a/externals/fftease/residency~.c b/externals/fftease/residency~.c new file mode 100644 index 000000000..8162bd0f0 --- /dev/null +++ b/externals/fftease/residency~.c @@ -0,0 +1,491 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *residency_class; + +#define OBJECT_NAME "residency~" + +typedef struct _residency +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float **loveboat; + t_float current_frame; + long framecount; + long last_framecount; + // + t_float frame_increment; + t_float fpos; + t_float last_fpos; + t_float tadv; + short acquire_stop; // flag to stop recording immediately + float force_pos; // force to this position on receiving message + int read_me; + int frames_read; + short mute; + short playthrough; + t_float duration; + short lock; + short verbose; + short override; + t_float *input_vec; + t_float sync; + short failed_init; // flag to check if init failed due to bad data from Max + t_float size_attr; + short interpolation_attr; +} t_residency; + +void residency_dsp(t_residency *x, t_signal **sp); +t_int *residency_perform(t_int *w); +void *residency_new(t_symbol *s, int argc, t_atom *argv); +void residency_bangname(t_residency *x) ; +void residency_fftinfo(t_residency *x) ; +void residency_playthrough( t_residency *x, t_floatarg tog) ; +void residency_mute(t_residency *x, t_floatarg tog); +void residency_interpolation(t_residency *x, t_floatarg tog); +void residency_free(t_residency *x); +void residency_init(t_residency *x); +void residency_size(t_residency *x, t_floatarg newsize); +void residency_verbose(t_residency *x, t_floatarg t); +void residency_force_position(t_residency *x, t_floatarg position); +void residency_acquire_sample(t_residency *x); +void residency_meminfo( t_residency *x ); +void residency_acquire_stop(t_residency *x); +void residency_transpose(t_residency *x, t_floatarg tf); +void residency_synthresh(t_residency *x, t_floatarg thresh); +void residency_oscbank(t_residency *x, t_floatarg flag); +void do_residency(t_residency *x); + +void residency_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("residency~"), (t_newmethod)residency_new, + (t_method)residency_free,sizeof(t_residency), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_residency, x_f); + class_addmethod(c,(t_method)residency_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)residency_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_interpolation,gensym("interpolation"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_synthresh,gensym("synthresh"),A_FLOAT,0); + class_addmethod(c,(t_method)residency_acquire_sample,gensym("acquire_sample"), 0); + class_addmethod(c,(t_method)residency_acquire_stop,gensym("acquire_stop"), 0); + class_addmethod(c,(t_method)residency_playthrough,gensym("playthrough"), A_DEFFLOAT, 0); + class_addmethod(c,(t_method)residency_force_position,gensym("force_position"), A_FLOAT, 0); + + residency_class = c; + fftease_announce(OBJECT_NAME); +} + +void residency_force_position(t_residency *x, t_floatarg position) +{ + if( position >= 0.0 && position < 1.0 ){ + x->force_pos = position; + } +} + +void residency_meminfo( t_residency *x ) +{ + t_fftease *fft = x->fft; + post("%d frames in buffer", x->framecount); + post("frame_duration: %f, actual time in buffer: %f", x->tadv, (float)(x->framecount) * x->tadv); + post("main storage chunk: %.2f MB", (x->framecount * (fft->N + 2) * sizeof(t_float)) / 1000000.0 ); +} + +void residency_transpose(t_residency *x, t_floatarg tf) +{ + x->fft->P = tf; +} + +void residency_synthresh(t_residency *x, t_floatarg thresh) +{ + x->fft->synt = thresh; +} + +void residency_oscbank(t_residency *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void residency_verbose(t_residency *x, t_floatarg t) +{ + x->verbose = t; +} + +void residency_size(t_residency *x, t_floatarg newsize) +{ + if(newsize > 0.0){//could be horrendous size, but that's the user's problem + x->duration = newsize/1000.0; + residency_init(x); + } +} + +void residency_playthrough (t_residency *x, t_floatarg tog) +{ + x->playthrough = tog; +} + +void residency_acquire_stop(t_residency *x) +{ + x->acquire_stop = 1; + x->read_me = 0; +} + +void residency_free(t_residency *x){ + int i; + if(x->fft->initialized){ + for(i = 0; i < x->framecount; i++){ + free(x->loveboat[i]) ; + } + free(x->loveboat); + } + fftease_free(x->fft); + free(x->fft); +} + +void *residency_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_residency *x = (t_residency *)pd_new(residency_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + + x->fft->N = FFTEASE_DEFAULT_FFTSIZE; + x->fft->overlap = FFTEASE_DEFAULT_OVERLAP; + x->fft->winfac = FFTEASE_DEFAULT_WINFAC; + x->last_framecount = x->framecount = 0; + + if(argc > 0){ x->duration = atom_getfloatarg(0, argc, argv) / 1000.0; } + else { post("%s: must give duration argument",OBJECT_NAME); return NULL; } + if(argc > 1){ fft->N = (int) atom_getfloatarg(1, argc, argv); } + if(argc > 2){ fft->overlap = (int) atom_getfloatarg(2, argc, argv); } + return x; +} + +void residency_init(t_residency *x) +{ + int i; + t_fftease *fft = x->fft; + if(!fft->R){ + return; + } + if(fft->initialized == -1){ + return; + } + + fftease_init(x->fft); + + x->tadv = (t_float)fft->D/(t_float)fft->R; + if( x->duration <= 0 ){ + x->duration = 1.0; + } + if(!x->tadv){ + return; + } + x->framecount = x->duration / x->tadv; + x->read_me = 0; + x->acquire_stop = 0; + if(x->verbose){ + post("%s: will allocate %d frames",OBJECT_NAME, x->framecount); + } + // could probably improve memory management here + if(x->framecount <= 0){ + // post("bad framecount:%s",x->framecount); + return; + } + if(fft->initialized == 0){ + // x->virgin = 1; + x->force_pos = -1.0; + x->current_frame = 0; + x->fpos = x->last_fpos = 0; + + x->sync = 0; + x->mute = 0; + x->playthrough = 0; + x->frame_increment = 0.0; // frozen by default + x->verbose = 0; + x->loveboat = (t_float **) calloc(x->framecount, sizeof(t_float *)); + for(i=0;i < x->framecount; i++){ + x->loveboat[i] = (t_float *) calloc((fft->N + 2), sizeof(t_float)); + if(x->loveboat[i] == NULL){ + error("%s: memory error",OBJECT_NAME); + return; + } + } + } + else if((x->framecount == x->last_framecount) && (fft->initialized != 0)){ + return; + } + else if(fft->initialized == 1) { + if(x->framecount != x->last_framecount) { + // free individual oldies + for(i = 0; i < x->last_framecount; i++){ + free(x->loveboat[i]); + } + x->loveboat = (t_float**)realloc(x->loveboat, x->framecount * sizeof(t_float *)); + + for(i=0;i < x->framecount; i++){ + x->loveboat[i] = (t_float *) calloc((fft->N + 2), sizeof(t_float)); + if(x->loveboat[i] == NULL){ + error("%s: memory error",OBJECT_NAME); + return; + } + } + } + } + + if(! fftease_msp_sanity_check(fft, OBJECT_NAME)){ + // return 0; + post("residency~ failed sanity test in Init"); + x->failed_init = 1; + } else { + x->failed_init = 0; + } + if (fft->D <= 0.0 || fft->R <= 0.0){ + error("%s: bad decimation size or bad sampling rate - cannot proceed",OBJECT_NAME); + post("D: %d R: %d",fft->D, fft->R); + return; + } + x->last_framecount = x->framecount; +} + +void do_residency(t_residency *x) +{ + int i; + t_float fframe = x->current_frame ; + t_float last_fpos = x->last_fpos ; + int framecount = x->framecount; + t_float fincr = x->frame_increment; + t_float fpos = x->fpos; + t_float force_pos = x->force_pos; + t_float frak; + long index1, index2; + + t_fftease *fft = x->fft; + + if(x->acquire_stop){ + x->acquire_stop = 0; + fpos = (t_float) x->frames_read / (t_float) framecount; + last_fpos = fpos; + fframe = x->frames_read; + if(x->verbose){ + post("residency: data acquisition stopped"); + } + } + else if(x->read_me) { // state for sampling to buffer + if(x->frames_read >= framecount){ // termination condition + x->read_me = 0; + if(x->verbose){ + post("residency: data acquisition completed"); + } + } + else { // convert and store in one frame + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_convert(fft); + for(i= 0; i < fft->N + 2; i++){ + x->loveboat[x->frames_read][i] = fft->channel[i]; + } + ++(x->frames_read); + + } + } + else { // a sample is now in the buffer + if(fpos < 0) + fpos = 0; + if(fpos > 1) + fpos = 1; + + if(force_pos >= 0.0 && force_pos < 1.0){ + // post("forcing frame to %f", force_pos); + fframe = force_pos * (float) framecount; + last_fpos = fpos = force_pos; + x->force_pos = -1.0; + } + else if(fpos != last_fpos){ + fframe = fpos * (float) framecount; + last_fpos = fpos; + } + fframe += fincr; + + while(fframe >= framecount) { + fframe -= framecount; + } + while( fframe < 0. ) { + fframe += framecount; + } + if(x->framecount > 0) { + x->sync = fframe/(float)x->framecount; + } + if(x->interpolation_attr == 1){ + index1 = floor(fframe); + index2 = (index1+1) % x->framecount; + frak = fframe - (t_float)index1; + for(i= 0; i < fft->N + 2; i++){ + fft->channel[i] = + x->loveboat[index1][i] + frak * (x->loveboat[index2][i] - x->loveboat[index1][i]); + } + } + else { + for(i= 0; i < fft->N + 2; i++){ + fft->channel[i]= x->loveboat[(int)fframe][i]; + } + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } + } + /* restore state variables */ + + x->current_frame = fframe; + x->frame_increment = fincr; + x->fpos = fpos; + x->last_fpos = last_fpos; +} + +t_int *residency_perform(t_int *w) +{ + int i, j; + + ////////////////////////////////////////////// + t_residency *x = (t_residency *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *increment = (t_float *)(w[3]); + t_float *position = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + t_float *vec_sync = (t_float *)(w[6]); + t_fftease *fft = x->fft; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + + x->frame_increment = *increment; + x->fpos = *position; + if( fft->obank_flag ) + mult *= FFTEASE_OSCBANK_SCALAR; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + for(i=0; i < MSPVectorSize; i++){ vec_sync[i] = 0.0; } + return w+7; + } + + if(x->acquire_stop){ + // will reset flag inside do_residency + for(i=0; i < MSPVectorSize; i++){ output[i] = 0.0; } + x->read_me = 0; + } + for ( i = 0; i < MSPVectorSize; i++ ){ + vec_sync[i] = x->sync; + } + if(x->framecount > 0 && x->read_me ) + x->sync = (t_float)x->frames_read/(t_float)x->framecount; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_residency(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_residency(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_residency(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } +return w+7; +} + +void residency_acquire_sample(t_residency *x) +{ + x->read_me = 1; + x->frames_read = 0; + if(x->verbose) + post("beginning spectral data acquisition"); + return; +} + +void residency_mute(t_residency *x, t_floatarg tog) +{ + x->mute = (short) tog; +} + +void residency_interpolation(t_residency *x, t_floatarg tog) +{ + x->interpolation_attr = (short) tog; +} + +void residency_dsp(t_residency *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + residency_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(residency_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec); + } +} diff --git a/externals/fftease/schmear~.c b/externals/fftease/schmear~.c new file mode 100644 index 000000000..6277e9676 --- /dev/null +++ b/externals/fftease/schmear~.c @@ -0,0 +1,309 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *schmear_class; + +#define OBJECT_NAME "schmear~" +#define MAXSCHMEAR (129) + +typedef struct _schmear +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float schmearmult; + short mute; + t_float *spreader; + t_float *newamps; + int spreadlen; + t_float threshold; + short freakmode; + int shift; +} t_schmear; + +void schmear_dsp(t_schmear *x, t_signal **sp); +t_int *schmear_perform(t_int *w); +void *schmear_new(t_symbol *s, int argc, t_atom *argv); +void schmear_mute(t_schmear *x, t_floatarg toggle); +void schmear_rel2peak(t_schmear *x, t_floatarg toggle); +void schmear_free(t_schmear *x); +void schmear_init(t_schmear *x); +void schmear_threshold(t_schmear *x, t_floatarg f); +void schmear_schmimp(t_schmear *x, t_symbol *msg, short argc, t_atom *argv); +void schmear_shift(t_schmear *x, t_floatarg f); +void schmear_oscbank(t_schmear *x, t_floatarg flag); + +void schmear_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("schmear~"), (t_newmethod)schmear_new, + (t_method)schmear_free,sizeof(t_schmear), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_schmear, x_f); + class_addmethod(c,(t_method)schmear_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)schmear_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)schmear_threshold,gensym("threshold"),A_FLOAT,0); + class_addmethod(c,(t_method)schmear_shift,gensym("shift"),A_FLOAT,0); + class_addmethod(c,(t_method)schmear_schmimp,gensym("schmimp"),A_GIMME,0); + + schmear_class = c; + fftease_announce(OBJECT_NAME); +} + +void schmear_oscbank(t_schmear *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void schmear_mute(t_schmear *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void schmear_shift(t_schmear *x, t_floatarg f) +{ + x->shift = (int)f; +} + +void schmear_schmimp(t_schmear *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + if(argc > MAXSCHMEAR){ + post("%d is too long for schmear", argc); + return; + } + if(! (argc % 2) ){ + post("%s: impulse length %d must be odd",OBJECT_NAME, argc); + return; + } + for( i = 0; i < argc; i++ ){ + x->spreader[i] = atom_getfloatarg(i,argc,argv); + } + x->spreadlen = argc; +} + +void schmear_threshold(t_schmear *x, t_floatarg t) +{ + x->threshold = (float)t; +} + +void *schmear_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_schmear *x = (t_schmear *)pd_new(schmear_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft->initialized = 0; + x->threshold = 0.1; + x->schmearmult = 0.1; + x->mute = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void schmear_init(t_schmear *x) +{ + + t_fftease *fft = x->fft; + fftease_init(fft); + x->newamps = (t_float *) calloc((fft->N2+1), sizeof(t_float)); + x->spreadlen = 7; + x->spreader = (t_float *) calloc(MAXSCHMEAR, sizeof(t_float)); + x->spreader[0] = 0.6; + x->spreader[1] = 0.3; + x->spreader[2] = 0.15; + x->spreader[3] = 0.0; + x->spreader[4] = 0.15; + x->spreader[5] = 0.3; + x->spreader[6] = 0.6; + x->shift = 0; +} + +void schmear_free(t_schmear *x) +{ + if(x->fft->initialized){ + free(x->newamps); + free(x->spreader); + } + fftease_free(x->fft); + free(x->fft); +} + +void do_schmear(t_schmear *x) +{ + int i, j; + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + t_float frame_peak = 0.0, local_thresh; + t_float threshold = x->threshold; + int shift = x->shift; + int N = fft->N; + int N2 = fft->N2; + t_float *newamps = x->newamps; + t_float *spreader = x->spreader; + t_float curamp; + int spreadlen = x->spreadlen; + int spread_center = (spreadlen - 1) / 2; + int thisbin; + + fftease_fold(fft); + fftease_rdft(fft,1); + fftease_convert(fft); + + for(i = 0; i < N; i += 2){ + if(frame_peak < channel[i]) + frame_peak = channel[i]; + } + local_thresh = frame_peak * threshold; + for(i = 0; i < N2; i++){ + newamps[i] = 0.0; + } + /* + if( freakmode ){ // weird mistake version + for(i = 0; i < N2; i++){ + if(channel[i * 2] > local_thresh){ + curamp = channel[i * 2]; + for(j = i - spread_center; j <= i + spread_center; j++){ + if(j >= 0 && j < N2){ + newamps[j] += curamp * spreader[j + spread_center]; + } + } + } + } + } + */ + // no spread for now + + for(i = 0; i < N2; i++){ + curamp = channel[i * 2]; + if(curamp > local_thresh){ + + for(j = 0; j < spreadlen; j++){ + thisbin = i + j - spread_center; + if(thisbin >= 0 && thisbin < N2){ + newamps[thisbin] += curamp * spreader[j]; + } + } + + } else { + newamps[i] = curamp; + } + } + + if( shift > 0 ){ + for( i = 0; i < N2; i++){ + channel[i * 2] = newamps[i]; + } + for( i = 0; i < N2; i++){ + newamps[(i + shift) % N2] = channel[i * 2]; + } + } + // move amps back where they belong + for(i = 0; i < N2; i++){ + channel[i * 2] = newamps[i]; + } + fftease_unconvert(fft); + fftease_rdft(fft,-1); + fftease_overlapadd(fft); + +} + +t_int *schmear_perform(t_int *w) +{ + int i,j; + t_schmear *x = (t_schmear *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *MSPOutputVector = (t_float *)(w[3]); + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for( j = 0; j < MSPVectorSize; j++) { + *MSPOutputVector++ = *MSPInputVector++ * FFTEASE_BYPASS_GAIN; + } + return w+4; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_schmear(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_schmear(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_schmear(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+4; +} + +void schmear_dsp(t_schmear *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + schmear_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(schmear_perform, 3, x, sp[0]->s_vec, sp[1]->s_vec); + } +} diff --git a/externals/fftease/scrape~.c b/externals/fftease/scrape~.c new file mode 100644 index 000000000..addf00fcf --- /dev/null +++ b/externals/fftease/scrape~.c @@ -0,0 +1,288 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *scrape_class; + +#define OBJECT_NAME "scrape~" + +typedef struct _scrape +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float knee; + t_float cutoff; + t_float scrape_mult; + t_float thresh1; + t_float thresh2; + t_float *threshfunc; + short mute; +} t_scrape; + +void scrape_dsp(t_scrape *x, t_signal **sp); +t_int *scrape_perform(t_int *w); +void *scrape_new(t_symbol *msg, short argc, t_atom *argv); +void update_thresh_function( t_scrape *x ); +void scrape_frowned( float *S, float *C, float *threshfunc, float fmult, int N2 ); +void scrape_mute(t_scrape *x, t_floatarg toggle); +void scrape_free( t_scrape *x ); +void update_thresh_function( t_scrape *x ); +void scrape_init(t_scrape *x); + +void scrape_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("scrape~"), (t_newmethod)scrape_new, + (t_method)scrape_free,sizeof(t_scrape), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_scrape, x_f); + class_addmethod(c,(t_method)scrape_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)scrape_mute,gensym("mute"),A_FLOAT,0); + + scrape_class = c; + fftease_announce(OBJECT_NAME); +} + +void scrape_free( t_scrape *x ) +{ + if(x->fft->initialized){ + free(x->threshfunc); + } + fftease_free(x->fft); + free(x->fft); +} + +void *scrape_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_fftease *fft; + t_scrape *x = (t_scrape *)pd_new(scrape_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1, sizeof(t_fftease) ); + fft = x->fft; + fft->initialized = 0; + x->knee = 1000.0; + x->cutoff = 4000.0; + x->thresh1 = 0.001; + x->thresh2 = 0.09; + x->scrape_mult = 0.1; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void scrape_init(t_scrape *x) +{ + t_fftease *fft = x->fft; + short initialized = fft->initialized; + + fftease_init(fft); + + if(!initialized){ + x->mute = 0; + x->threshfunc = (t_float *) calloc(fft->N2, sizeof(t_float)); + update_thresh_function(x); + } else if(initialized == 1){ + x->threshfunc = (t_float *) realloc(x->threshfunc, fft->N2 * sizeof(t_float)); + update_thresh_function(x); + } +} + +void update_thresh_function( t_scrape *x ) +{ + t_float funda, curfreq, m1, m2; + int i; + int R = x->fft->R; + int N = x->fft->N; + int N2 = x->fft->N2; + + funda = (t_float) R / ((t_float)N); + curfreq = funda ; + for( i = 0; i < N2; i++ ) { + if( curfreq < x->knee ){ + x->threshfunc[i] = 0.0 ; + } else if( curfreq >= x->knee && curfreq < x->cutoff ) { + m2 = (x->knee - curfreq) / (x->cutoff - x->knee) ; + m1 = 1.0 - m2 ; + x->threshfunc[i] = m1 * x->thresh1 + m2 * x->thresh2 ; + } else { + x->threshfunc[i] = x->thresh2; + } + curfreq += funda ; + } +} + +void scrape_mute(t_scrape *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void do_scrape(t_scrape *x) +{ + int real, imag, amp, phase; + t_float a, b; + int i; + t_float maxamp = 0.0; + t_fftease *fft = x->fft; + int N2 = fft->N2; + t_float scrape_mult = x->scrape_mult; + t_float *channel = fft->channel; + t_float *buffer = fft->buffer; + t_float *threshfunc = x->threshfunc; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + + for( i = 0; i <= N2; i++ ){ + amp = i<<1; + if( maxamp < channel[amp] ){ + maxamp = channel[amp]; + } + } + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + a = ( i == N2 ? buffer[1] : buffer[real] ); + b = ( i == 0 || i == N2 ? 0. : buffer[imag] ); + channel[amp] = hypot( a, b ); + + if ( (channel[amp]) < threshfunc[i] * maxamp ){ + channel[amp] *= scrape_mult; + } + channel[phase] = -atan2( b, a ); + } + + for ( i = 0; i <= N2; i++ ) { + imag = phase = ( real = amp = i<<1 ) + 1; + buffer[real] = *(channel+amp) * cos( *(channel+phase) ); + if ( i != N2 ) + buffer[imag] = -*(channel+amp) * sin( *(channel+phase) ); + } + + fftease_rdft(fft, FFT_INVERSE); + fftease_overlapadd(fft); +} + +t_int *scrape_perform(t_int *w) +{ + int i,j; + t_float tmp ; + t_scrape *x = (t_scrape *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *knee_freq = (t_float *)(w[3]); + t_float *cut_freq = (t_float *)(w[4]); + t_float *thresh1 = (t_float *)(w[5]); + t_float *thresh2 = (t_float *)(w[6]); + t_float *scrape_mult = (t_float *)(w[7]); + t_float *MSPOutputVector = (t_float *)(w[8]); + + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+9; + } + tmp = *knee_freq++; + if( tmp > 50 && tmp < 20000 ){ + x->knee = tmp; + } + tmp = *cut_freq++; + if( tmp > x->knee && tmp < 20000 ){ + x->cutoff = *cut_freq++; + } + x->thresh1 = *thresh1; + x->thresh2 = *thresh2; + x->scrape_mult = *scrape_mult; + update_thresh_function( x ); + + // + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_scrape(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_scrape(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_scrape(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+9; +} + +void scrape_dsp(t_scrape *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + scrape_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(scrape_perform, 8, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[4]->s_vec, sp[5]->s_vec, sp[6]->s_vec); + } +} diff --git a/externals/fftease/shapee~.c b/externals/fftease/shapee~.c new file mode 100644 index 000000000..0be48cf28 --- /dev/null +++ b/externals/fftease/shapee~.c @@ -0,0 +1,366 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *shapee_class; + +#define OBJECT_NAME "shapee~" + +typedef struct _shapee +{ + t_object x_obj; + float x_f; + t_fftease *fft,*fft2; + int widthConnected; + t_float shapeWidth; + short mute; +} t_shapee; + + +/* msp function prototypes */ + +void *shapee_new(t_symbol *s, int argc, t_atom *argv); +void shapee_init(t_shapee *x); +void shapee_mute(t_shapee *x, t_floatarg state); +void shapee_free(t_shapee *x); +void shapee_dsp(t_shapee *x, t_signal **sp); +t_int *shapee_perform(t_int *w); +void shapee_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("shapee~"), (t_newmethod)shapee_new, + (t_method)shapee_free,sizeof(t_shapee), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_shapee, x_f); + class_addmethod(c,(t_method)shapee_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)shapee_mute,gensym("mute"),A_FLOAT,0); + shapee_class = c; + fftease_announce(OBJECT_NAME); +} + +void *shapee_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_fftease *fft, *fft2; + t_shapee *x = (t_shapee *)pd_new(shapee_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + /* INITIALIZATIONS */ + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + fft2->R = fft->R = sys_getsr(); + fft2->MSPVectorSize = fft->MSPVectorSize = sys_getblksize(); + x->shapeWidth = 2.0; + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void shapee_init(t_shapee *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + if(!initialized){ + x->mute = 0; + } +} + +void shapee_mute(t_shapee *x, t_floatarg state) +{ + x->mute = (short)state; +} + +void do_shapee(t_shapee *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int + i,j, + + R, + N, + N2, + D, + Nw, + remainingWidth, + even, odd; + + + t_float + a1, b1, + a2, b2, + *bufferOne, + *bufferTwo, + *channelOne, + *channelTwo; + + +int shapeWidth = (int) x->shapeWidth; + + bufferOne = fft->buffer; + bufferTwo = fft2->buffer; + R = fft->R; + N = fft->N; + N2 = fft->N2; + D = fft->D; + Nw = fft->Nw; + + channelOne = fft->channel; + channelTwo = fft2->channel; + + + + if(shapeWidth < 1 || shapeWidth > N2) + shapeWidth = 1; + + /* apply hamming window and fold our window buffer into the fft buffer */ + + fftease_fold(fft); + fftease_fold(fft2); + + /* do an fft */ + + fftease_rdft(fft,FFT_FORWARD); + fftease_rdft(fft2,FFT_FORWARD); + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + /* replace signal one's phases with those of signal two */ + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + } + + /* constrain our shapeWidth value */ + + if ( shapeWidth > N2 ) + shapeWidth = N2; + + if ( shapeWidth < 1 ) + shapeWidth = 1; + + + /* lets just shape the entire signal by the shape width */ + + for ( i=0; i < N; i += shapeWidth << 1 ) { + + float amplSum = 0., + freqSum = 0., + factor; + + for ( j = 0; j < shapeWidth << 1; j += 2 ) { + + amplSum += *(channelTwo+i+j); + freqSum += *(channelOne+i+j); + } + if(freqSum <= 0.001){ + freqSum = 1.0; + } + if (amplSum < 0.000000001) + factor = 0.000000001; + + else + factor = amplSum / freqSum; + + for ( j = 0; j < shapeWidth * 2; j += 2 ) + *(channelOne+i+j) *= factor; + } + + /* copy remaining magnitudes */ + + if ( (remainingWidth = N2 % shapeWidth) ) { + + int bindex = (N2 - remainingWidth) << 1; + + + float amplSum = 0., + freqSum = 0., + factor; + + for ( j = 0; j < remainingWidth * 2; j += 2 ) { + + amplSum += *(channelTwo+bindex+j); + freqSum += *(channelOne+bindex+j); + } + if(freqSum <= 0.00001){ + freqSum = 1.0; + } + if (amplSum < 0.000000001) + factor = 0.000000001; + + else + factor = amplSum / freqSum; + + for ( j = 0; j < remainingWidth * 2; j += 2 ) + *(channelOne+bindex+j) *= factor; + } + + + /* convert from polar to cartesian */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = (*(channelOne+even)) * -sin( *(channelOne+odd) ); + } + + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); +} + + +t_int *shapee_perform(t_int *w) +{ + int i,j; + /* get our inlets and outlets */ + t_shapee *x = (t_shapee *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *inShape = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + x->shapeWidth = *inShape; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_shapee(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_shapee(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_shapee(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void shapee_free( t_shapee *x ) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void shapee_dsp(t_shapee *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + shapee_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(shapee_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); + } +} diff --git a/externals/fftease/smap.pd b/externals/fftease/smap.pd new file mode 100644 index 000000000..de9549d85 --- /dev/null +++ b/externals/fftease/smap.pd @@ -0,0 +1,28 @@ +#N canvas 0 22 458 308 10; +#X obj 88 84 inlet; +#X obj 88 110 / 127; +#X obj 265 144 - 0; +#X obj 283 38 t b b; +#X floatatom 128 161 5 0 0 0 - - -; +#X obj 88 181 *; +#X obj 88 210 +; +#X floatatom 135 192 5 0 0 0 - - -; +#X obj 88 237 outlet; +#X obj 283 17 loadbang; +#X floatatom 205 125 5 0 0 0 - - -; +#X obj 227 66 float \$2; +#X obj 304 67 float \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 4 0; +#X connect 3 0 11 0; +#X connect 3 1 12 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 7 0 6 1; +#X connect 9 0 3 0; +#X connect 10 0 2 0; +#X connect 11 0 10 0; +#X connect 12 0 2 1; +#X connect 12 0 7 0; diff --git a/externals/fftease/swinger~.c b/externals/fftease/swinger~.c new file mode 100644 index 000000000..346dafff2 --- /dev/null +++ b/externals/fftease/swinger~.c @@ -0,0 +1,294 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *swinger_class; + +#define OBJECT_NAME "swinger~" + +typedef struct _swinger +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; + short mute; +} t_swinger; + +void swinger_dsp(t_swinger *x, t_signal **sp); +t_int *swinger_perform(t_int *w); +void *swinger_new(t_symbol *s, int argc, t_atom *argv); +void swinger_mute(t_swinger *x, t_floatarg state); +void swinger_init(t_swinger *x); +void swinger_free(t_swinger *x); + +void swinger_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("swinger~"), (t_newmethod)swinger_new, + (t_method)swinger_free,sizeof(t_swinger), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_swinger, x_f); + class_addmethod(c,(t_method)swinger_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)swinger_mute,gensym("mute"),A_FLOAT,0); + swinger_class = c; + fftease_announce(OBJECT_NAME); +} + +void swinger_mute(t_swinger *x, t_floatarg state) +{ + x->mute = state; +} + +void *swinger_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + t_swinger *x = (t_swinger *)pd_new(swinger_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void swinger_init(t_swinger *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(!fft->initialized){ + x->mute = 0; + } + fftease_init(fft); + fftease_init(fft2); + +} + +void do_swinger(t_swinger *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int + i, + + R, + N, + N2, + D, + Nw, + + even, odd; + + t_float + a1, b1, + a2, b2, + *bufferOne, + *bufferTwo, + *channelOne, + *channelTwo; + bufferOne = fft->buffer; + bufferTwo = fft2->buffer; + R = fft->R; + N = fft->N; + N2 = fft->N2; + D = fft->D; + Nw = fft->Nw; + channelOne = fft->channel; + channelTwo = fft2->channel; + + + /* apply hamming window and fold our window buffer into the fft buffer */ + + fftease_fold(fft); + fftease_fold(fft2); + + /* do an fft */ + + fftease_rdft(fft,FFT_FORWARD); + fftease_rdft(fft2,FFT_FORWARD); + + /* use redundant coding for speed, even though moving the invert variable + comparison outside of the for loop will give us only a minimal performance + increase (hypot and atan2 are the most intensive portions of this code). + consider adding a table lookup for atan2 instead. + */ + + /* convert to polar coordinates from complex values */ + + for ( i = 0; i <= N2; i++ ) { + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + /* replace signal one's phases with those of signal two */ + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b2, a2 ); + } + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + + + /* do an inverse fft */ + + fftease_rdft(fft,FFT_INVERSE); + + + + /* dewindow our result */ + + fftease_overlapadd(fft); + + /* set our output and adjust our retaining output buffer */ + + +} + +t_int *swinger_perform(t_int *w) +{ + int i,j; + t_swinger *x = (t_swinger *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *MSPOutputVector = (t_float *)(w[4]); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + /* no computation if muted */ + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+5; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_swinger(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_swinger(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_swinger(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+5; +} + +void swinger_free( t_swinger *x ) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void swinger_dsp(t_swinger *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + swinger_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(swinger_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} \ No newline at end of file diff --git a/externals/fftease/taint~.c b/externals/fftease/taint~.c new file mode 100644 index 000000000..8d35ab7e5 --- /dev/null +++ b/externals/fftease/taint~.c @@ -0,0 +1,378 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *taint_class; + +#define OBJECT_NAME "taint~" + +typedef struct _taint +{ + t_object x_obj; + float x_f; + t_fftease *fft; + t_fftease *fft2; + t_float mult; + short mute; + int invert; + int invert_countdown; // delay onset of invert effect to avoid loud glitches + int invert_nextstate; // next state for invert + t_float invert_pad; + t_float threshold; + t_float exponent; +} t_taint; + +/* msp function prototypes */ + +void taint_dsp(t_taint *x, t_signal **sp); +t_int *taint_perform(t_int *w); +void *taint_new(t_symbol *s, int argc, t_atom *argv); +void taint_invert(t_taint *x, t_floatarg toggle); +void taint_free(t_taint *x); +void taint_mute(t_taint *x, t_floatarg toggle); +void taint_tilde_setup(void); +void taint_init(t_taint *x); +void taint_pad(t_taint *x, t_floatarg pad); + +void taint_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("taint~"), (t_newmethod)taint_new, + (t_method)taint_free,sizeof(t_taint), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_taint, x_f); + class_addmethod(c,(t_method)taint_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)taint_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)taint_invert,gensym("invert"), A_FLOAT, 0); + class_addmethod(c,(t_method)taint_pad,gensym("pad"), A_FLOAT, 0); + taint_class = c; + fftease_announce(OBJECT_NAME); +} + +void taint_mute(t_taint *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void taint_free(t_taint *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void taint_pad(t_taint *x, t_floatarg pad) +{ + x->invert_pad = pad; + taint_invert(x,x->invert);//resubmit to invert +} + +void taint_invert(t_taint *x, t_floatarg toggle) +{ + t_fftease *fft = x->fft; + x->invert_nextstate = toggle; + x->invert_countdown = fft->overlap; // delay effect for "overlap" vectors + + if(x->invert_nextstate){ // lower gain immediately; delay going to invert + x->fft->mult = (1. / (t_float) x->fft->N) * x->invert_pad; + } else { + x->invert = 0; //immediately turn off invert; delay raising gain + } +} + +void *taint_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + + t_taint *x = (t_taint *)pd_new(taint_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + x->exponent = 0.25; + x->threshold = 0.01; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + if(argc > 0){ fft->N = fft2->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = fft2->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void taint_init(t_taint *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + short initialized = fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + if(!initialized){ + x->invert_pad = 0.025; // -32 dB + x->invert_countdown = 0; + x->mute = 0; + x->invert = 0; + } + if(x->invert){ + x->mult *= x->invert_pad; + } +} + +void do_taint(t_taint *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int i; + int odd,even; + t_float a1,b1,a2,b2; + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + int N2 = fft->N2; + t_float *channelOne = fft->channel; + t_float *channelTwo = fft2->channel; + t_float threshold = x->threshold; + t_float exponent = x->exponent; + int invert = x->invert; + + + /* apply hamming window and fold our window buffer into the fft buffer */ + + fftease_fold(fft); + fftease_fold(fft2); + + /* do an fft */ + + fftease_rdft(fft,FFT_FORWARD); + fftease_rdft(fft2,FFT_FORWARD); + + /* convert to polar coordinates from complex values */ + + if (invert) { + + for ( i = 0; i <= N2; i++ ) { + + t_float magnitude; + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + magnitude = *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + + /* use threshold for inverse filtering to avoid division by zero */ + + if ( magnitude < threshold ) + magnitude = 0.; + + else + magnitude = 1. / magnitude; + + *(channelOne+even) *= magnitude; + *(channelOne+even) = pow( *(channelOne+even), exponent ); + } + } + + + else { + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + + /* simple multiplication of magnitudes */ + + *(channelOne+even) *= *(channelTwo+even); + + *(channelOne+even) = pow( *(channelOne+even), exponent ); + } + } + + /* convert back to complex form, read for the inverse fft */ + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + + + + fftease_rdft(fft,FFT_INVERSE); + + fftease_overlapadd(fft); + +} + +t_int *taint_perform(t_int *w) +{ + int + i,j; + + /* get our inlets and outlets */ + t_taint *x = (t_taint *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *vec_exponent = (t_float *)(w[4]); + t_float *vec_threshold = (t_float *)(w[5]); + t_float *MSPOutputVector = (t_float *)(w[6]);; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + //short *connected = x->connected; + /* dereference structure */ + + x->exponent = *vec_exponent; + x->threshold = *vec_threshold; + + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+7; + } + + + if(x->invert_countdown > 0){ + + --(x->invert_countdown); + if(! x->invert_countdown){ // countdown just ended + if(x->invert_nextstate){ // moving to invert (gain is already down) + x->invert = x->invert_nextstate; + } else { // invert is already off - now reset gain + mult = x->fft->mult = 1. / (t_float) x->fft->N; + } + } + } +// + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_taint(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_taint(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_taint(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+7; +} + +void taint_dsp(t_taint *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + taint_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(taint_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec, + sp[4]->s_vec); + } +} \ No newline at end of file diff --git a/externals/fftease/thresher~.c b/externals/fftease/thresher~.c new file mode 100644 index 000000000..4d992b82c --- /dev/null +++ b/externals/fftease/thresher~.c @@ -0,0 +1,272 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *thresher_class; + +#define OBJECT_NAME "thresher~" +#define DEFAULT_HOLD (40.0) + +typedef struct _thresher +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_float move_threshold; + t_float *composite_frame; + int *frames_left; + int max_hold_frames; + t_float max_hold_time; + int first_frame; + t_float damping_factor; + short thresh_connected; + short damping_connected; + short mute; + t_float tadv; +} t_thresher; + +void thresher_dsp(t_thresher *x, t_signal **sp); +t_int *thresher_perform(t_int *w); +void *thresher_new(t_symbol *s, int argc, t_atom *argv); +void thresher_mute(t_thresher *x, t_floatarg f); +void thresher_free( t_thresher *x ); +void thresher_init(t_thresher *x); +void thresher_transpose(t_thresher *x, t_floatarg tf); +void thresher_synthresh(t_thresher *x, t_floatarg thresh); +void thresher_oscbank(t_thresher *x, t_floatarg flag); + +void thresher_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("thresher~"), (t_newmethod)thresher_new, + (t_method)thresher_free,sizeof(t_thresher), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_thresher, x_f); + class_addmethod(c,(t_method)thresher_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)thresher_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(c,(t_method)thresher_oscbank,gensym("oscbank"),A_FLOAT,0); + class_addmethod(c,(t_method)thresher_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(c,(t_method)thresher_synthresh,gensym("synthresh"),A_FLOAT,0); + thresher_class = c; + fftease_announce(OBJECT_NAME); +} + +void thresher_transpose(t_thresher *x, t_floatarg tf) +{ + x->fft->P = tf; +} + +void thresher_synthresh(t_thresher *x, t_floatarg thresh) +{ + x->fft->synt = thresh; +} + +void thresher_oscbank(t_thresher *x, t_floatarg flag) +{ + x->fft->obank_flag = (short) flag; +} + +void thresher_free(t_thresher *x){ + if(x->fft->initialized){ + free(x->composite_frame); + } + fftease_free(x->fft); + free(x->fft); +} + +void thresher_mute(t_thresher *x, t_floatarg f){ + x->mute = (short)f; +} + +void *thresher_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft; + t_thresher *x = (t_thresher *)pd_new(thresher_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease) ); + fft = x->fft; + fft->initialized = 0; + x->move_threshold = 0.001; + x->damping_factor = 0.99; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void thresher_init(t_thresher *x) +{ + t_fftease *fft = x->fft; + short initialized = fft->initialized; + + fftease_init(fft); + x->tadv = (t_float) fft->D / (t_float) fft->R ; + + if(!initialized){ + x->mute = 0; + if(!x->damping_factor){ + x->damping_factor = .95; + } + x->first_frame = 1; + x->move_threshold = .00001 ; + x->max_hold_time = DEFAULT_HOLD ; + x->max_hold_frames = x->max_hold_time / x->tadv; + x->composite_frame = (t_float *) calloc( (fft->N+2), sizeof(t_float)); + x->frames_left = (int *) calloc( (fft->N+2), sizeof(int) ); + + } else if(initialized == 1){ + x->composite_frame = (t_float *) realloc(x->composite_frame, (fft->N+2) * sizeof(t_float) ); + x->frames_left = (int *) realloc(x->frames_left, (fft->N+2) * sizeof(int) ); + } +} + +void do_thresher(t_thresher *x) +{ + int i; + + t_fftease *fft = x->fft; + t_float *channel = fft->channel; + t_float damping_factor = x->damping_factor; + int max_hold_frames = x->max_hold_frames; + int *frames_left = x->frames_left; + t_float *composite_frame = x->composite_frame; + int N = fft->N; + t_float move_threshold = x->move_threshold; + + fftease_fold(fft); + fftease_rdft(fft,FFT_FORWARD); + fftease_convert(fft); + + if( x->first_frame ){ + for ( i = 0; i < N+2; i++ ){ + composite_frame[i] = channel[i]; + frames_left[i] = max_hold_frames; + } + x->first_frame = 0; + } else { + for( i = 0; i < N+2; i += 2 ){ + if(fabs( composite_frame[i] - channel[i] ) > move_threshold || frames_left[i] <= 0 ){ + composite_frame[i] = channel[i]; + composite_frame[i+1] = channel[i+1]; + frames_left[i] = max_hold_frames; + } else { + --(frames_left[i]); + composite_frame[i] *= damping_factor; + } + } + } + // try memcpy here + for ( i = 0; i < N+2; i++ ){ + channel[i] = composite_frame[i]; + } + if(fft->obank_flag){ + fftease_oscbank(fft); + } else { + fftease_unconvert(fft); + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + } +} + +t_int *thresher_perform(t_int *w) +{ + int i,j; + t_thresher *x = (t_thresher *) (w[1]); + t_float *MSPInputVector = (t_float *)(w[2]); + t_float *inthresh = (t_float *)(w[3]); + t_float *damping = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + + t_fftease *fft = x->fft; + int D = fft->D; + int Nw = fft->Nw; + t_float *input = fft->input; + t_float *output = fft->output; + t_float mult = fft->mult; + int MSPVectorSize = fft->MSPVectorSize; + t_float *internalInputVector = fft->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + + x->move_threshold = *inthresh; + x->damping_factor = *damping; + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), MSPInputVector, D * sizeof(t_float)); + + do_thresher(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw-D), MSPInputVector + (D*i), D * sizeof(t_float)); + + do_thresher(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector + (operationCount * MSPVectorSize), MSPInputVector,MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize),MSPVectorSize * sizeof(t_float)); + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(input, input + D, (Nw - D) * sizeof(t_float)); + memcpy(input + (Nw - D), internalInputVector, D * sizeof(t_float)); + + do_thresher(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void thresher_dsp(t_thresher *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + if(!samplerate) + return; + t_fftease *fft = x->fft; + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + } + if(fft->R != samplerate){ + fft->R = samplerate; + } + if(reset_required){ + thresher_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(thresher_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); + } +} \ No newline at end of file diff --git a/externals/fftease/unconvert.c b/externals/fftease/unconvert.c new file mode 100644 index 000000000..2a2f774c5 --- /dev/null +++ b/externals/fftease/unconvert.c @@ -0,0 +1,39 @@ +#include "fftease.h" + + + +//void fftease_unconvert( t_float *C, t_float *S, int N2, t_float *lastphase, t_float fundamental, t_float factor ) +// fftease_unconvert( channel, buffer, N2, c_lastphase_out, c_fundamental, c_factor_out ); + +void fftease_unconvert(t_fftease *fft) + +{ + t_float *channel = fft->channel; + t_float *buffer = fft->buffer; + int N2 = fft->N2; + t_float *lastphase = fft->c_lastphase_out; + t_float fundamental = fft->c_fundamental; + t_float factor = fft->c_factor_out; + + int i, real, imag, amp, freq; + t_float mag, phase; + + + for ( i = 0; i <= N2; i++ ) { + + imag = freq = ( real = amp = i<<1 ) + 1; + + if ( i == N2 ) + real = 1; + + mag = channel[amp]; + lastphase[i] += channel[freq] - i*fundamental; + phase = lastphase[i]*factor; + buffer[real] = mag*cos( phase ); + + if ( i != N2 ) + buffer[imag] = -mag*sin( phase ); + + } + +} diff --git a/externals/fftease/vacancy~.c b/externals/fftease/vacancy~.c new file mode 100644 index 000000000..c99d58154 --- /dev/null +++ b/externals/fftease/vacancy~.c @@ -0,0 +1,382 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *vacancy_class; + +#define OBJECT_NAME "vacancy~" + +typedef struct _vacancy +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_fftease *fft2; + int invert; + int useRms; + int swapPhase; + short mute; + t_float threshold; +} t_vacancy; + + +/* msp function prototypes */ + +void vacancy_dsp(t_vacancy *x, t_signal **sp); +t_int *vacancy_perform(t_int *w); +void *vacancy_new(t_symbol *s, int argc, t_atom *argv); +void vacancy_rms(t_vacancy *x, t_floatarg f); +void vacancy_invert(t_vacancy *x, t_floatarg f); +void vacancy_swapphase(t_vacancy *x, t_floatarg f); +void vacancy_free(t_vacancy *x); +void vacancy_mute(t_vacancy *x, t_floatarg toggle); +void vacancy_tilde_setup(void); +void vacancy_init(t_vacancy *x); + +void vacancy_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("vacancy~"), (t_newmethod)vacancy_new, + (t_method)vacancy_free,sizeof(t_vacancy), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_vacancy, x_f); + class_addmethod(c,(t_method)vacancy_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)vacancy_mute,gensym("mute"),A_FLOAT,0); + + class_addmethod(c,(t_method)vacancy_rms,gensym("rms"), A_FLOAT, 0); + class_addmethod(c,(t_method)vacancy_invert,gensym("invert"), A_FLOAT, 0); + class_addmethod(c,(t_method)vacancy_swapphase,gensym("swapphase"), A_FLOAT, 0); + + vacancy_class = c; + fftease_announce(OBJECT_NAME); +} + +void vacancy_rms(t_vacancy *x, t_floatarg f) +{ + x->useRms = (int) f; +} + +void vacancy_invert(t_vacancy *x, t_floatarg f) +{ + x->invert = (int) f; +} + +void vacancy_swapphase(t_vacancy *x, t_floatarg f) +{ + x->swapPhase = (int) f; +} + +void vacancy_mute(t_vacancy *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void *vacancy_new(t_symbol *s, int argc, t_atom *argv) +{ + t_fftease *fft, *fft2; + + t_vacancy *x = (t_vacancy *)pd_new(vacancy_class); + + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + + return x; +} + +void vacancy_init(t_vacancy *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + short initialized = x->fft->initialized; + + fftease_init(fft); + fftease_init(fft2); + + if(!initialized){ + x->mute = 0; + x->invert = 0; + x->threshold = 0.01; + x->useRms = 1; + x->swapPhase = 0; + } +} + +void vacancy_free(t_vacancy *x) +{ + fftease_free(x->fft); + fftease_free(x->fft2); + free(x->fft); + free(x->fft2); +} + +void do_vacancy(t_vacancy *x) +{ + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int + i, + + even, odd; + float + useme, + rms = 0., + a1, b1, + a2, b2; + + + /* dereference structure */ + + t_float *bufferOne = fft->buffer; + t_float *bufferTwo = fft2->buffer; + int N2 = fft->N2; + int Nw = fft->Nw; + t_float *channelOne = fft->channel; + t_float *channelTwo = fft2->channel; + t_float *inputOne = fft->input; + int invert = x->invert; + int useRms = x->useRms; + int swapPhase = x->swapPhase; + + + + if (useRms) { + + rms = 0.; + + for ( i=0; i < Nw; i++ ) + rms += *(inputOne+i) * *(inputOne+i); + + rms = sqrt( rms / Nw ); + + useme = rms * x->threshold; + } + + else + useme = x->threshold; + + fftease_fold(fft); + fftease_fold(fft2); + + fftease_rdft(fft,FFT_FORWARD); + fftease_rdft(fft2,FFT_FORWARD); + + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + a1 = ( i == N2 ? *(bufferOne+1) : *(bufferOne+even) ); + b1 = ( i == 0 || i == N2 ? 0. : *(bufferOne+odd) ); + + a2 = ( i == N2 ? *(bufferTwo+1) : *(bufferTwo+even) ); + b2 = ( i == 0 || i == N2 ? 0. : *(bufferTwo+odd) ); + + *(channelOne+even) = hypot( a1, b1 ); + *(channelOne+odd) = -atan2( b1, a1 ); + + *(channelTwo+even) = hypot( a2, b2 ); + *(channelTwo+odd) = -atan2( b2, a2 ); + } + + + + + if (invert) { + + if (swapPhase) { + + for ( i=0; i < N2; i+=2 ) { + if ( *(channelOne+i) > useme && *(channelTwo+i) < *(channelOne+i) ) { + *(channelOne+i) = *(channelTwo+i); + *(channelOne+i+1) = *(channelTwo+i+1); + } + } + } + + else { + + for ( i=0; i < N2; i+=2 ) { + if ( *(channelOne+i) > useme && *(channelTwo+i) < *(channelOne+i) ) { + *(channelOne+i) = *(channelTwo+i); + + if ( *(channelOne+i+1) == 0. ) + *(channelOne+i+1) = *(channelTwo+i+1); + } + } + } + } + + else { + + if (swapPhase) { + + for ( i=0; i < N2; i+=2 ) { + if ( *(channelOne+i) < useme && *(channelTwo+i) > *(channelOne+i) ) { + *(channelOne+i) = *(channelTwo+i); + *(channelOne+i+1) = *(channelTwo+i+1); + } + } + } + + else { + + for ( i=0; i < N2; i+=2 ) { + + if ( *(channelOne+i) < useme && *(channelTwo+i) > *(channelOne+i) ) { + *(channelOne+i) = *(channelTwo+i); + + if ( *(channelOne+i+1) == 0. ) + *(channelOne+i+1) = *(channelTwo+i+1); + } + } + } + } + + + + for ( i = 0; i <= N2; i++ ) { + + odd = ( even = i<<1 ) + 1; + + *(bufferOne+even) = *(channelOne+even) * cos( *(channelOne+odd) ); + + if ( i != N2 ) + *(bufferOne+odd) = -(*(channelOne+even)) * sin( *(channelOne+odd) ); + } + + + + fftease_rdft(fft,FFT_INVERSE); + fftease_overlapadd(fft); + +} + +t_int *vacancy_perform(t_int *w) +{ + + int + i,j; + + /* get our inlets and outlets */ + t_vacancy *x = (t_vacancy *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *vec_threshold = (t_float *)(w[4]); + t_float *MSPOutputVector = (t_float *)(w[5]); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+6; + } + + x->threshold = *vec_threshold; + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_vacancy(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_vacancy(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_vacancy(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+6; +} + +void vacancy_dsp(t_vacancy *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + vacancy_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(vacancy_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); + } +} diff --git a/externals/fftease/xsyn~.c b/externals/fftease/xsyn~.c new file mode 100644 index 000000000..b5b412b45 --- /dev/null +++ b/externals/fftease/xsyn~.c @@ -0,0 +1,233 @@ +/* Pd 32-bit FFTease 3.0 */ + +#include "fftease.h" + +static t_class *xsyn_class; + +#define OBJECT_NAME "xsyn~" + +typedef struct _xsyn +{ + t_object x_obj; + t_float x_f; + t_fftease *fft; + t_fftease *fft2; + short mute; +} t_xsyn; + +void xsyn_dsp(t_xsyn *x, t_signal **sp); +t_int *xsyn_perform(t_int *w); +void *xsyn_new(t_symbol *s, int argc, t_atom *argv); +t_int *offset_perform(t_int *w); +void xsyn_free( t_xsyn *x ); +void xsyn_init(t_xsyn *x); +void xsyn_mute(t_xsyn *x, t_floatarg toggle); + +void xsyn_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("xsyn~"), (t_newmethod)xsyn_new, + (t_method)xsyn_free,sizeof(t_xsyn), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_xsyn, x_f); + class_addmethod(c,(t_method)xsyn_dsp,gensym("dsp"),0); + class_addmethod(c,(t_method)xsyn_mute,gensym("mute"),A_FLOAT,0); + xsyn_class = c; + fftease_announce(OBJECT_NAME); +} + +void xsyn_free( t_xsyn *x ) +{ + + fftease_free(x->fft); + free(x->fft); + fftease_free(x->fft2); + free(x->fft2); +} + +void xsyn_mute(t_xsyn *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void *xsyn_new(t_symbol *s, int argc, t_atom *argv) +{ + t_xsyn *x = (t_xsyn *)pd_new(xsyn_class); + t_fftease *fft, *fft2; + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->fft = (t_fftease *) calloc(1,sizeof(t_fftease)); + x->fft2 = (t_fftease *) calloc(1,sizeof(t_fftease)); + fft = x->fft; + fft2 = x->fft2; + fft->initialized = 0; + fft2->initialized = 0; + + fft->N = FFTEASE_DEFAULT_FFTSIZE; + fft->overlap = FFTEASE_DEFAULT_OVERLAP; + fft->winfac = FFTEASE_DEFAULT_WINFAC; + fft2->N = FFTEASE_DEFAULT_FFTSIZE; + fft2->overlap = FFTEASE_DEFAULT_OVERLAP; + fft2->winfac = FFTEASE_DEFAULT_WINFAC; + x->mute = 0; + if(argc > 0){ fft->N = (int) atom_getfloatarg(0, argc, argv); } + if(argc > 1){ fft->overlap = (int) atom_getfloatarg(1, argc, argv); } + return x; +} + +void xsyn_init(t_xsyn *x) +{ + fftease_init(x->fft); + fftease_init(x->fft2); +} + +void do_xsyn(t_xsyn *x) +{ + + int i; + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + t_float *channel1 = fft->channel; + t_float *channel2 = fft2->channel; + int N = fft->N; + t_float maxamp; + + fftease_fold(fft); + fftease_fold(fft2); + + fftease_rdft(fft,FFT_FORWARD); + fftease_rdft(fft2,FFT_FORWARD); + + fftease_leanconvert(fft); + fftease_leanconvert(fft2); + + maxamp = 0; + + for( i = 0; i < N; i+= 2 ) { + if( channel2[i] > maxamp ) { + maxamp = channel2[i]; + } + } + + if( maxamp > 0.000001 ){ + for( i = 0; i < N; i+= 2 ) { + channel1[i] *= (channel2[i] / maxamp ); + } + } + + fftease_leanunconvert(fft); + + fftease_rdft(fft,FFT_INVERSE); + + fftease_overlapadd(fft); +} + +t_int *xsyn_perform(t_int *w) +{ + int i,j; + t_xsyn *x = (t_xsyn *) (w[1]); + t_float *MSPInputVector1 = (t_float *)(w[2]); + t_float *MSPInputVector2 = (t_float *)(w[3]); + t_float *MSPOutputVector = (t_float *)(w[4]); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + int MSPVectorSize = fft->MSPVectorSize; + int operationRepeat = fft->operationRepeat; + int operationCount = fft->operationCount; + t_float *internalInputVector1 = fft->internalInputVector; + t_float *internalInputVector2 = fft2->internalInputVector; + t_float *internalOutputVector = fft->internalOutputVector; + t_float *inputOne = fft->input; + t_float *inputTwo = fft2->input; + t_float *output = fft->output; + int D = fft->D; + int Nw = fft->Nw; + t_float mult = fft->mult; + + if(x->mute){ + for(i=0; i < MSPVectorSize; i++){ MSPOutputVector[i] = 0.0; } + return w+5; + } + + if( fft->bufferStatus == EQUAL_TO_MSP_VECTOR ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), MSPInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), MSPInputVector2, D * sizeof(t_float)); + + do_xsyn(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + else if( fft->bufferStatus == SMALLER_THAN_MSP_VECTOR ) { + for( i = 0; i < operationRepeat; i++ ){ + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw-D), MSPInputVector1 + (D*i), D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw-D), MSPInputVector2 + (D*i), D * sizeof(t_float)); + + do_xsyn(x); + + for ( j = 0; j < D; j++ ){ *MSPOutputVector++ = output[j] * mult; } + memcpy(output, output + D, (Nw-D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + } + else if( fft->bufferStatus == BIGGER_THAN_MSP_VECTOR ) { + memcpy(internalInputVector1 + (operationCount * MSPVectorSize), MSPInputVector1, MSPVectorSize * sizeof(t_float)); + memcpy(internalInputVector2 + (operationCount * MSPVectorSize), MSPInputVector2, MSPVectorSize * sizeof(t_float)); + memcpy(MSPOutputVector, internalOutputVector + (operationCount * MSPVectorSize), MSPVectorSize * sizeof(t_float)); + + operationCount = (operationCount + 1) % operationRepeat; + + if( operationCount == 0 ) { + memcpy(inputOne, inputOne + D, (Nw - D) * sizeof(t_float)); + memcpy(inputOne + (Nw - D), internalInputVector1, D * sizeof(t_float)); + memcpy(inputTwo, inputTwo + D, (Nw - D) * sizeof(t_float)); + memcpy(inputTwo + (Nw - D), internalInputVector2, D * sizeof(t_float)); + + do_xsyn(x); + + for ( j = 0; j < D; j++ ){ internalOutputVector[j] = output[j] * mult; } + memcpy(output, output + D, (Nw - D) * sizeof(t_float)); + for(j = (Nw-D); j < Nw; j++){ output[j] = 0.0; } + } + fft->operationCount = operationCount; + } + return w+5; +} + +void xsyn_dsp(t_xsyn *x, t_signal **sp) +{ + int reset_required = 0; + int maxvectorsize = sys_getblksize(); + int samplerate = sys_getsr(); + + t_fftease *fft = x->fft; + t_fftease *fft2 = x->fft2; + + if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ + reset_required = 1; + } + if(!samplerate) + return; + + if(fft->MSPVectorSize != maxvectorsize){ + fft->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft); + fft2->MSPVectorSize = maxvectorsize; + fftease_set_fft_buffers(fft2); + } + if(fft->R != samplerate ){ + fft->R = samplerate; + fft2->R = samplerate; + } + if(reset_required){ + xsyn_init(x); + } + if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { + dsp_add(xsyn_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec); + } +} diff --git a/externals/lyonpotpourri b/externals/lyonpotpourri deleted file mode 160000 index 530895321..000000000 --- a/externals/lyonpotpourri +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 530895321c94d446577272b3f99e35b2f2076498 diff --git a/externals/lyonpotpourri/INSTALLATION.txt b/externals/lyonpotpourri/INSTALLATION.txt new file mode 100755 index 000000000..57f862abb --- /dev/null +++ b/externals/lyonpotpourri/INSTALLATION.txt @@ -0,0 +1 @@ +This distribution comes with binaries for both OSX (10.9) and Linux (Ubuntu 64-bit). To install, move folders “lyonpotpourri-externals†and “lyonpotpourri-helpfiles†to a location within your Pd search path. If the shipped externals work with your computer hardware, you are good to go. Otherwise, you will need to recompile the externals by typing “make†in a Terminal window. If on OSX, you need to have the developer tools installed in order to run Make. diff --git a/externals/lyonpotpourri/LICENSE.txt b/externals/lyonpotpourri/LICENSE.txt new file mode 100755 index 000000000..5a1ec226f --- /dev/null +++ b/externals/lyonpotpourri/LICENSE.txt @@ -0,0 +1,23 @@ +LyonPotpourri for Pd +Copyright (c) 2007-2012 Eric Lyon + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/externals/lyonpotpourri/MSPd.h b/externals/lyonpotpourri/MSPd.h new file mode 100755 index 000000000..ed36b9604 --- /dev/null +++ b/externals/lyonpotpourri/MSPd.h @@ -0,0 +1,42 @@ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> +#include <strings.h> +#include <string.h> + + +#define LYONPOTPOURRI_MSG "-<LyonPotpourri 3.0>-" + +#define NO_FREE_FUNCTION 0 + + +/* because Max and Pd have different ideas of what A_FLOAT is, use t_floatarg +to force consistency. Otherwise functions that look good will fail on some +hardware. Also note that Pd messages cannot accept arguments of type A_LONG. */ + + +#include "m_pd.h" +// #define t_floatarg float +#define t_double double + +#define atom_getsymarg atom_getsymbolarg + + +#ifndef PIOVERTWO +#define PIOVERTWO 1.5707963268 +#endif +#ifndef TWOPI +#define TWOPI 6.2831853072 +#endif +#ifndef PI +#define PI 3.14159265358979 +#endif + +/*** MSP helper functions **/ +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); + +// #define potpourri_announce(objname) post("( %s )\t%s",objname,LYONPOTPOURRI_MSG) + +#define potpourri_announce(objname) post("%s ( %s )",LYONPOTPOURRI_MSG,objname) \ No newline at end of file diff --git a/externals/lyonpotpourri/Makefile b/externals/lyonpotpourri/Makefile new file mode 100755 index 000000000..a21a8cbeb --- /dev/null +++ b/externals/lyonpotpourri/Makefile @@ -0,0 +1,448 @@ +## Pd library template version 1.0.14 +# For instructions on how to use this template, see: +# http://puredata.info/docs/developer/MakefileTemplate +LIBRARY_NAME = lyonpotpourri + +# add your .c source files, one object per file, to the SOURCES +# variable, help files will be included automatically, and for GUI +# objects, the matching .tcl file too +SOURCES = adsr~.c bashfest~.c buffet~.c bvplay~.c channel~.c chopper~.c clean_selector~.c click~.c click2bang~.c click2float~.c clickhold~.c distortion~.c dmach~.c expflam~.c flanjah~.c function~.c granola~.c granulesf~.c granule~.c kbuffer~.c killdc~.c magfreq_analysis~.c markov~.c mask~.c oscil~.c phasemod~.c player~.c pulser~.c rtrig~.c samm~.c sigseq~.c vdb~.c vdp~.c waveshape~.c epluribus~.c dynss~.c counter~.c latch~.c sarec~.c convolver~.c npan~.c shoehorn~.c rotapan~.c sel~.c squash~.c windowvec~.c cartopol~.c poltocar~.c arrayfilt~.c splitspec~.c stutter~.c vecdex~.c quadpan~.c splitbank~.c click~.c + +# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will +# be included automatically +PDOBJECTS = smap.pd + +# example patches and related files, in the 'examples' subfolder +EXAMPLES = BD0010.aif BT0AADA.aiff CP.aif KR55SNAR.aiff hi_c_12b.aiff hi_o_06e.aiff hi_o_15g.aiff kick_11d.aiff mar2.aif prettypad.aif soda-bd.aif trickhit.aif voice.wav + +# manuals and related files, in the 'manual' subfolder +MANUAL = + +# if you want to include any other files in the source and binary tarballs, +# list them here. This can be anything from header files, test patches, +# documentation, etc. README.txt and LICENSE.txt are required and therefore +# automatically included +EXTRA_DIST = MSPd.h PenroseOscil.h PenroseRand.h bashfest.h fftease.h ugens.h + +# unit tests and related files here, in the 'unittests' subfolder +UNITTESTS = + + +SHARED_SOURCE = bashfest_dsp.c bashfest_helper.c ellipse.c PenroseOscil.c PenroseRand.c bloscbank.c convert.c fft.c fft4.c fftease_setup.c fold.c leanconvert.c leanunconvert.c makewindows.c overlapadd.c power_of_two.c qsortE.c unconvert.c from_msp.c +SHARED_LIB = lib$(LIBRARY_NAME).$(SHARED_EXTENSION) + +#------------------------------------------------------------------------------# +# +# things you might need to edit if you are using other C libraries +# +#------------------------------------------------------------------------------# + +ALL_CFLAGS = -I"$(PD_INCLUDE)" +ALL_LDFLAGS = +SHARED_LDFLAGS = +ALL_LIBS = + + +#------------------------------------------------------------------------------# +# +# you shouldn't need to edit anything below here, if we did it right :) +# +#------------------------------------------------------------------------------# + +# these can be set from outside without (usually) breaking the build +#CFLAGS = -Wall -W -g +# Skip irritating warnings: +CFLAGS = -w -g +LDFLAGS = +LIBS = + +# get library version from meta file +LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd) + +ALL_CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"' + +PD_INCLUDE = $(PD_PATH)/include/pd +# where to install the library, overridden below depending on platform +prefix = /usr/local +libdir = $(prefix)/lib +pkglibdir = $(libdir)/pd-externals +objectsdir = $(pkglibdir) + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -p -m 644 +INSTALL_DATA = $(INSTALL) -p -m 644 +INSTALL_DIR = $(INSTALL) -p -m 755 -d + +ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \ + $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows) + +DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION) +ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION) + +UNAME := $(shell uname -s) +ifeq ($(UNAME),Darwin) + CPU := $(shell uname -p) + ifeq ($(CPU),arm) # iPhone/iPod Touch + SOURCES += $(SOURCES_iphoneos) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = iphoneos + PD_PATH = /Applications/Pd-0.47-1.app/Contents/Resources + IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin + CC=$(IPHONE_BASE)/gcc + CPP=$(IPHONE_BASE)/cpp + CXX=$(IPHONE_BASE)/g++ + ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk + IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6 + OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer + ALL_CFLAGS := $(IPHONE_CFLAGS) $(ALL_CFLAGS) + ALL_LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT) + SHARED_LDFLAGS += -arch armv6 -dynamiclib -undefined dynamic_lookup $(ISYSROOT) + ALL_LIBS += -lc $(LIBS_iphoneos) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) + else # Mac OS X + SOURCES += $(SOURCES_macosx) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = macosx + PD_PATH = + OPT_CFLAGS = -ftree-vectorize +# build universal 32-bit on 10.4 and 32/64 on newer + ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8) + FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4 + else + SOURCES += $(SOURCES_iphoneos) +# Starting with Xcode 4.0, the PowerPC compiler is not installed by default + ifeq ($(wildcard /usr/llvm-gcc-4.2/libexec/gcc/powerpc*), ) + FAT_FLAGS = -arch i386 -arch x86_64 -mmacosx-version-min=10.5 + else + FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + endif + endif + ALL_CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include + # if the 'pd' binary exists, check the linking against it to aid with stripping + BUNDLE_LOADER = $(shell test ! -e $(PD_PATH)/bin/pd || echo -bundle_loader $(PD_PATH)/bin/pd) + ALL_LDFLAGS += $(FAT_FLAGS) -headerpad_max_install_names -bundle $(BUNDLE_LOADER) \ + -undefined dynamic_lookup + SHARED_LDFLAGS += $(FAT_FLAGS) -dynamiclib -undefined dynamic_lookup \ + -install_name @loader_path/$(SHARED_LIB) -compatibility_version 1 -current_version 1.0 + ALL_LIBS += -lc $(LIBS_macosx) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) +# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much + pkglibdir=$(HOME)/Library/Pd + endif +endif +# Tho Android uses Linux, we use this fake uname to provide an easy way to +# setup all this things needed to cross-compile for Android using the NDK +ifeq ($(UNAME),ANDROID) + CPU := arm + SOURCES += $(SOURCES_android) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = android + PD_PATH = /usr + NDK_BASE := /usr/local/android-ndk + NDK_PLATFORM_VERSION := 5 + NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_VERSION)/arch-arm + NDK_UNAME := $(shell uname -s | tr '[A-Z]' '[a-z]') + NDK_TOOLCHAIN_BASE=$(NDK_BASE)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/$(NDK_UNAME)-x86 + CC := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-gcc --sysroot=$(NDK_SYSROOT) + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += + LDFLAGS += -rdynamic -shared + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + LIBS += -lc $(LIBS_android) + STRIP := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-strip \ + --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),Linux) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU) + # GNU/Hurd, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU/kFreeBSD) + # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_cygwin) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = cygwin + PD_PATH = $(shell cygpath $$PROGRAMFILES)/pd + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += + ALL_LDFLAGS += -rdynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc -lpd $(LIBS_cygwin) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif +ifeq (MINGW,$(findstring MINGW,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_windows) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = windows + PD_PATH = $(shell cd "$$PROGRAMFILES/pd" && pwd) + # MinGW doesn't seem to include cc so force gcc + CC=gcc + OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -mms-bitfields + ALL_LDFLAGS += -s -shared -Wl,--enable-auto-import + SHARED_LDFLAGS += -shared + ALL_LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" \ + -lpd -lwsock32 -lkernel32 -luser32 -lgdi32 $(LIBS_windows) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif + +# in case somebody manually set the HELPPATCHES above +HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd) + +ALL_CFLAGS := $(ALL_CFLAGS) $(CFLAGS) $(OPT_CFLAGS) +ALL_LDFLAGS := $(LDFLAGS) $(ALL_LDFLAGS) +ALL_LIBS := $(LIBS) $(ALL_LIBS) + +SHARED_SOURCE ?= $(wildcard lib$(LIBRARY_NAME).c) +SHARED_HEADER ?= $(shell test ! -e $(LIBRARY_NAME).h || echo $(LIBRARY_NAME).h) +SHARED_LIB ?= $(SHARED_SOURCE:.c=.$(SHARED_EXTENSION)) +SHARED_TCL_LIB = $(wildcard lib$(LIBRARY_NAME).tcl) + +.PHONY = install libdir_install single_install install-doc install-examples install-manual install-unittests clean distclean dist etags $(LIBRARY_NAME) + +all: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) + +%.o: %.c + $(CC) $(ALL_CFLAGS) -o "$*.o" -c "$*.c" + +%.$(EXTENSION): %.o $(SHARED_LIB) + $(CC) $(ALL_LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(ALL_LIBS) $(SHARED_LIB) + chmod a-x "$*.$(EXTENSION)" + +# this links everything into a single binary file +$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o lib$(LIBRARY_NAME).o + $(CC) $(ALL_LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) \ + $(LIBRARY_NAME).o lib$(LIBRARY_NAME).o $(ALL_LIBS) + chmod a-x $(LIBRARY_NAME).$(EXTENSION) + +$(SHARED_LIB): $(SHARED_SOURCE:.c=.o) + $(CC) $(SHARED_LDFLAGS) -o $(SHARED_LIB) $(SHARED_SOURCE:.c=.o) $(ALL_LIBS) + +install: libdir_install + +# The meta and help files are explicitly installed to make sure they are +# actually there. Those files are not optional, then need to be there. +libdir_install: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) install-doc install-examples install-manual install-unittests + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES))" || (\ + $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \ + $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))) + test -z "$(strip $(SHARED_LIB))" || \ + $(INSTALL_DATA) $(SHARED_LIB) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(wildcard $(SOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(SOURCES:.c=.tcl)) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SHARED_TCL_LIB))" || \ + $(INSTALL_DATA) $(SHARED_TCL_LIB) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + +# install library linked as single binary +single_install: $(LIBRARY_NAME) install-doc install-examples install-manual install-unittests + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION) + +install-doc: + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(HELPPATCHES) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt + $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt + +install-examples: + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \ + done + +install-manual: + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \ + done + +install-unittests: + test -z "$(strip $(UNITTESTS))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/unittests && \ + for file in $(UNITTESTS); do \ + $(INSTALL_DATA) unittests/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/unittests; \ + done + +clean: + -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o) $(SHARED_SOURCE:.c=.o) + -rm -f -- $(SOURCES:.c=.$(EXTENSION)) + -rm -f -- $(LIBRARY_NAME).o + -rm -f -- $(LIBRARY_NAME).$(EXTENSION) + -rm -f -- $(SHARED_LIB) + +distclean: clean + -rm -f -- $(DISTBINDIR).tar.gz + -rm -rf -- $(DISTBINDIR) + -rm -f -- $(DISTDIR).tar.gz + -rm -rf -- $(DISTDIR) + -rm -f -- $(ORIGDIR).tar.gz + -rm -rf -- $(ORIGDIR) + + +$(DISTBINDIR): + $(INSTALL_DIR) $(DISTBINDIR) + +libdir: all $(DISTBINDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR) + $(INSTALL_DATA) $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) $(DISTBINDIR) + $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR) +# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR) + +$(DISTDIR): + $(INSTALL_DIR) $(DISTDIR) + +$(ORIGDIR): + $(INSTALL_DIR) $(ORIGDIR) + +dist: $(DISTDIR) + $(INSTALL_DATA) Makefile $(DISTDIR) + $(INSTALL_DATA) README.txt $(DISTDIR) + $(INSTALL_DATA) LICENSE.txt $(DISTDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR) + test -z "$(strip $(ALLSOURCES))" || \ + $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR) + test -z "$(strip $(wildcard $(ALLSOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(ALLSOURCES:.c=.tcl)) $(DISTDIR) + test -z "$(strip $(wildcard $(LIBRARY_NAME).c))" || \ + $(INSTALL_DATA) $(LIBRARY_NAME).c $(DISTDIR) + test -z "$(strip $(SHARED_HEADER))" || \ + $(INSTALL_DATA) $(SHARED_HEADER) $(DISTDIR) + test -z "$(strip $(SHARED_SOURCE))" || \ + $(INSTALL_DATA) $(SHARED_SOURCE) $(DISTDIR) + test -z "$(strip $(SHARED_TCL_LIB))" || \ + $(INSTALL_DATA) $(SHARED_TCL_LIB) $(DISTDIR) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR) + test -z "$(strip $(HELPPATCHES))" || \ + $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR) + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DISTDIR)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \ + done + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DISTDIR)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \ + done + test -z "$(strip $(UNITTESTS))" || \ + $(INSTALL_DIR) $(DISTDIR)/unittests && \ + for file in $(UNITTESTS); do \ + $(INSTALL_DATA) unittests/$$file $(DISTDIR)/unittests; \ + done + tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR) + +# make a Debian source package +dpkg-source: + debclean + make distclean dist + mv $(DISTDIR) $(ORIGDIR) + tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR) + rm -f -- $(DISTDIR).tar.gz + rm -rf -- $(DISTDIR) $(ORIGDIR) + cd .. && dpkg-source -b $(LIBRARY_NAME) + +etags: TAGS + +TAGS: $(wildcard $(PD_INCLUDE)/*.h) $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) + etags $(wildcard $(PD_INCLUDE)/*.h) + etags -a *.h $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) + etags -a --language=none --regex="/proc[ \t]+\([^ \t]+\)/\1/" *.tcl + +showsetup: + @echo "CC: $(CC)" + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "LIBS: $(LIBS)" + @echo "ALL_CFLAGS: $(ALL_CFLAGS)" + @echo "ALL_LDFLAGS: $(ALL_LDFLAGS)" + @echo "ALL_LIBS: $(ALL_LIBS)" + @echo "PD_INCLUDE: $(PD_INCLUDE)" + @echo "PD_PATH: $(PD_PATH)" + @echo "objectsdir: $(objectsdir)" + @echo "LIBRARY_NAME: $(LIBRARY_NAME)" + @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)" + @echo "SOURCES: $(SOURCES)" + @echo "SHARED_HEADER: $(SHARED_HEADER)" + @echo "SHARED_SOURCE: $(SHARED_SOURCE)" + @echo "SHARED_LIB: $(SHARED_LIB)" + @echo "SHARED_TCL_LIB: $(SHARED_TCL_LIB)" + @echo "PDOBJECTS: $(PDOBJECTS)" + @echo "ALLSOURCES: $(ALLSOURCES)" + @echo "ALLSOURCES TCL: $(wildcard $(ALLSOURCES:.c=.tcl))" + @echo "UNAME: $(UNAME)" + @echo "CPU: $(CPU)" + @echo "pkglibdir: $(pkglibdir)" + @echo "DISTDIR: $(DISTDIR)" + @echo "ORIGDIR: $(ORIGDIR)" diff --git a/externals/lyonpotpourri/PenroseOscil.c b/externals/lyonpotpourri/PenroseOscil.c new file mode 100755 index 000000000..78cd7b684 --- /dev/null +++ b/externals/lyonpotpourri/PenroseOscil.c @@ -0,0 +1,40 @@ +#include <math.h> +#include "PenroseOscil.h" + + +float frequencyToIncrement( float samplingRate, float frequency, int bufferLength ) { + + return (frequency / samplingRate) * (float) bufferLength; +} + +void makeSineBuffer( float *buffer, int bufferLength ) { + + int i; + + float myTwoPi = 8. * atan(1.); + + for ( i=0; i <= bufferLength; i++ ) + *(buffer+i) = sin( myTwoPi * ((float) i / (float) bufferLength) ); + + return; +} + + +float bufferOscil( float *phase, float increment, float *buffer, + int bufferLength ) +{ + + float sample; + + while ( *phase > bufferLength ) + *phase -= bufferLength; + + while ( *phase < 0. ) + *phase += bufferLength; + + sample = *( buffer + (int) (*phase) ); + + *phase += increment; + + return sample; +} diff --git a/externals/lyonpotpourri/PenroseOscil.h b/externals/lyonpotpourri/PenroseOscil.h new file mode 100755 index 000000000..a47414d21 --- /dev/null +++ b/externals/lyonpotpourri/PenroseOscil.h @@ -0,0 +1,8 @@ + +float frequencyToIncrement( float samplingRate, float frequency, + int bufferLength ); + +void makeSineBuffer( float *buffer, int bufferLength ); + +float bufferOscil( float *phase, float increment, float *buffer, + int bufferLength ); diff --git a/externals/lyonpotpourri/PenroseRand.c b/externals/lyonpotpourri/PenroseRand.c new file mode 100755 index 000000000..98f396e6d --- /dev/null +++ b/externals/lyonpotpourri/PenroseRand.c @@ -0,0 +1,13 @@ +#include "PenroseRand.h" + +float rrand(int *seed) +{ + int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; + return((float)i/16384. - 1.); +} + +float prand(int *seed) +{ + int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; + return((float)i/32768.); +} diff --git a/externals/lyonpotpourri/PenroseRand.h b/externals/lyonpotpourri/PenroseRand.h new file mode 100755 index 000000000..fb06588a6 --- /dev/null +++ b/externals/lyonpotpourri/PenroseRand.h @@ -0,0 +1,3 @@ + +float rrand(int *seed); +float prand(int *seed); diff --git a/externals/lyonpotpourri/README.md b/externals/lyonpotpourri/README.md new file mode 100755 index 000000000..7f2e92fbe --- /dev/null +++ b/externals/lyonpotpourri/README.md @@ -0,0 +1,72 @@ +Welcome to LyonPotpourri, version 3.0 (64-bit version). + +http://disis.music.vt.edu/eric/LyonSoftware/Pd/LyonPotpourri/ + +LyonPotpourri is a collection of externals developed for the creation and performance of computer music. The externals were originally developed for Max/MSP, and then extended into hybrid code that could compile for both Max/MSP and Pd. As of version 3.0, the code bases of Max/MSP and Pd have diverged to such an extent that I decided to split the LyonPotpourri code into separate Pd and Max/MSP versions. + +The Pd platform tends toward minimalism. Therefore, it is particularly advantageous for Pd users to become adept at designing their own externals. It is hoped that in addition to the utility of specific externals in this collection, the source code will be helpful for computer musicians who wish to learn how to write their own externals. For further guidance on that subject, please see my book “Designing Audio Objects for Max/MSP and Pd.†+ +LyonPotpourri 3.0 is Copyright Eric Lyon, 2007-2013, and is covered under the MIT license. Please see the accompanying License file for details. + + +Object Listing: + +- adsr~ a simple ADSR envelope that can be click triggered +- arrayfilt~ fft-based filtering by drawing into an array +- bashfest~ a click driven buffer player with randomized DSP +- buffet~ provides operations on a stored buffer +- bvplay~ selective playback from a stored buffer with enveloping and increment control +- cartopol~ convert a spectral frame from cartesian to polar form +- channel~ access to a precise address in the signal vector +- chopper~ munging loop playback from a buffer +- clean_selector~ like selector~ but crossfades when switching channels +- click~ converts a bang to a click +- click2float~ translates a signal click to a float message +- clickhold~ sample and hold a click +- convolver~ non-real-time convolution with impulses of arbitrary size +- distortion~ lookup function distortion +- dmach~ pattern based sample accurate drum machine prototype +- expflam~ converts a click to an exponential flam click pattern +- flanjah~ simple flanger +- function~ write various functions into an array +- granola~ granular pitch scaling +- granulesf~ granular synthesis module reading from a soundfile in a buffer +- granule~ granular synthesis module reading from a stored waveform in a buffer +- kbuffer~ low sampling rate buffer to capture gestures +- killdc~ DC block filter +- latch~ sustain an incoming click with sample-accurate timing +- magfreq_analysis~ transforms a time domain signal to a magnitude/frequency spectrum +- markov~ implements a first order Markov chain +- mask~ a click driven pattern sequencer +- npan~ power-panning to an arbitrary number of output channels +- oscil~ oscillator with flexible waveform specification +- phasemod~ phase modulated waveform +- player~ click driven buffer player that can sustain multiple iterations +- poltocar~ convert spectral frame from polar to complex representation +- pulser~ pulse wave generated by additive synthesis +- quadpan~ pan an incoming sound within a quadraphonic plane +- rotapan~ rotate an array of input channels to the same number of output channels +- rtrig~ generates random click triggers +- samm~ sample accurate multiple metronomes, with click signal articulation +- sarec~ sample accurate recording +- sel~ sample-accurate implementation of the sel algorithm +- shoehorn~ collapse from a larger number to a smaller number of audio channels +- sigseq~ signal level numerical sequencer +- splitbank~ - split an incoming sound into complementary, independently tunable spectra +- splitspec~ split an incoming sound into complementary spectra +- squash~ implementation of a compression algorithm by Chris Penrose +- stutter~ stuttering playback from an array +- vdb~ a delay line using an array for storage (no vector limit on feedback delaytime) +- vdp~ a simple, self-contained delay unit +- vecdex~ outputs the sample index within the current signal vector +- waveshape~ a Chebychev function lookup waveshaper +- windowvec~ apply a Hann window to the input signal vector + +Best wishes for the success of your creative projects and explorations! + +Eric Lyon +ericlyon@vt.edu +Department of Music +Institute for Creativity, Arts, and Technology +Virginia Tech +# lyonpotpourri3.0 diff --git a/externals/lyonpotpourri/README.txt b/externals/lyonpotpourri/README.txt new file mode 100755 index 000000000..288861393 --- /dev/null +++ b/externals/lyonpotpourri/README.txt @@ -0,0 +1,71 @@ +Welcome to LyonPotpourri, version 3.0 (64-bit version). + +http://disis.music.vt.edu/eric/LyonSoftware/Pd/LyonPotpourri/ + +LyonPotpourri is a collection of externals developed for the creation and performance of computer music. The externals were originally developed for Max/MSP, and then extended into hybrid code that could compile for both Max/MSP and Pd. As of version 3.0, the code bases of Max/MSP and Pd have diverged to such an extent that I decided to split the LyonPotpourri code into separate Pd and Max/MSP versions. + +The Pd platform tends toward minimalism. Therefore, it is particularly advantageous for Pd users to become adept at designing their own externals. It is hoped that in addition to the utility of specific externals in this collection, the source code will be helpful for computer musicians who wish to learn how to write their own externals. For further guidance on that subject, please see my book “Designing Audio Objects for Max/MSP and Pd.†+ +LyonPotpourri 3.0 is Copyright Eric Lyon, 2007-2013, and is covered under the MIT license. Please see the accompanying License file for details. + + +Object Listing: + +- adsr~ a simple ADSR envelope that can be click triggered +- arrayfilt~ fft-based filtering by drawing into an array +- bashfest~ a click driven buffer player with randomized DSP +- buffet~ provides operations on a stored buffer +- bvplay~ selective playback from a stored buffer with enveloping and increment control +- cartopol~ convert a spectral frame from cartesian to polar form +- channel~ access to a precise address in the signal vector +- chopper~ munging loop playback from a buffer +- clean_selector~ like selector~ but crossfades when switching channels +- click~ converts a bang to a click +- click2float~ translates a signal click to a float message +- clickhold~ sample and hold a click +- convolver~ non-real-time convolution with impulses of arbitrary size +- distortion~ lookup function distortion +- dmach~ pattern based sample accurate drum machine prototype +- expflam~ converts a click to an exponential flam click pattern +- flanjah~ simple flanger +- function~ write various functions into an array +- granola~ granular pitch scaling +- granulesf~ granular synthesis module reading from a soundfile in a buffer +- granule~ granular synthesis module reading from a stored waveform in a buffer +- kbuffer~ low sampling rate buffer to capture gestures +- killdc~ DC block filter +- latch~ sustain an incoming click with sample-accurate timing +- magfreq_analysis~ transforms a time domain signal to a magnitude/frequency spectrum +- markov~ implements a first order Markov chain +- mask~ a click driven pattern sequencer +- npan~ power-panning to an arbitrary number of output channels +- oscil~ oscillator with flexible waveform specification +- phasemod~ phase modulated waveform +- player~ click driven buffer player that can sustain multiple iterations +- poltocar~ convert spectral frame from polar to complex representation +- pulser~ pulse wave generated by additive synthesis +- quadpan~ pan an incoming sound within a quadraphonic plane +- rotapan~ rotate an array of input channels to the same number of output channels +- rtrig~ generates random click triggers +- samm~ sample accurate multiple metronomes, with click signal articulation +- sarec~ sample accurate recording +- sel~ sample-accurate implementation of the sel algorithm +- shoehorn~ collapse from a larger number to a smaller number of audio channels +- sigseq~ signal level numerical sequencer +- splitbank~ - split an incoming sound into complementary, independently tunable spectra +- splitspec~ split an incoming sound into complementary spectra +- squash~ implementation of a compression algorithm by Chris Penrose +- stutter~ stuttering playback from an array +- vdb~ a delay line using an array for storage (no vector limit on feedback delaytime) +- vdp~ a simple, self-contained delay unit +- vecdex~ outputs the sample index within the current signal vector +- waveshape~ a Chebychev function lookup waveshaper +- windowvec~ apply a Hann window to the input signal vector + +Best wishes for the success of your creative projects and explorations! + +Eric Lyon +ericlyon@vt.edu +Department of Music +Institute for Creativity, Arts, and Technology +Virginia Tech diff --git a/externals/lyonpotpourri/Updates.txt b/externals/lyonpotpourri/Updates.txt new file mode 100755 index 000000000..291cb7a41 --- /dev/null +++ b/externals/lyonpotpourri/Updates.txt @@ -0,0 +1,4 @@ +Updates to LyonPotpourri 3.0 + +12.22.2013 +Nothing yet! \ No newline at end of file diff --git a/externals/lyonpotpourri/adsr~-help.pd b/externals/lyonpotpourri/adsr~-help.pd new file mode 100755 index 000000000..0ca845b3e --- /dev/null +++ b/externals/lyonpotpourri/adsr~-help.pd @@ -0,0 +1,73 @@ +#N canvas 487 392 455 385 10; +#X obj 115 233 adsr~; +#X msg 115 94 bang; +#X obj 35 187 osc~ 400; +#X obj 97 274 *~; +#X obj 97 304 *~ 0.1; +#X obj 97 335 dac~; +#X msg 175 112 10 50 50 50; +#X text 254 115 adsr data as list; +#X msg 182 137 100 50 100 500; +#X obj 175 90 loadbang; +#N canvas 0 22 673 325 individual-adsr-elements 0; +#X obj 62 244 outlet; +#X msg 62 158 set_a \$1; +#X msg 135 159 set_d \$1; +#X msg 210 158 set_s \$1; +#X msg 283 159 set_r \$1; +#X msg 353 159 set_gain1 \$1; +#X msg 451 160 set_gain2 \$1; +#X obj 353 110 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 2900 1; +#X obj 451 109 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 2030 1; +#X obj 62 106 vsl 15 30 1 100 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 1435 1; +#X obj 135 110 vsl 15 30 10 100 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 1289 1; +#X obj 210 107 vsl 15 30 50 500 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 967 1; +#X obj 283 109 vsl 15 30 50 1000 0 0 empty empty empty 0 -8 0 8 -242048 +-1 -1 458 1; +#X msg 62 40 50 50 200 200 1 0.7; +#X obj 62 64 unpack f f f f f f; +#X obj 62 16 loadbang; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 9 0 1 0; +#X connect 10 0 2 0; +#X connect 11 0 3 0; +#X connect 12 0 4 0; +#X connect 13 0 14 0; +#X connect 14 0 9 0; +#X connect 14 1 10 0; +#X connect 14 2 11 0; +#X connect 14 3 12 0; +#X connect 14 4 7 0; +#X connect 14 5 8 0; +#X connect 15 0 13 0; +#X restore 194 163 pd individual-adsr-elements; +#X obj 205 200 samm~ 40 1; +#X text 30 39 adsr~ - An ADSR envelope triggered by signal clicks or +bangs; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 111 74 trigger ADSR; +#X text 273 197 slow click metronome; +#X connect 0 0 3 1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 6 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; diff --git a/externals/lyonpotpourri/adsr~.c b/externals/lyonpotpourri/adsr~.c new file mode 100755 index 000000000..467187dd9 --- /dev/null +++ b/externals/lyonpotpourri/adsr~.c @@ -0,0 +1,334 @@ +#include "MSPd.h" +/* internal metronome now redundant so disabled */ +// LyonPotpourri 3.0 - Max references removed + + +static t_class *adsr_class; + +#define OBJECT_NAME "adsr~" + +typedef struct _adsr +{ + t_object x_obj; + float x_f; + // Variables Here + float a; + float d; + float s; + float r; + int ebreak1; + int ebreak2; + int ebreak3; + int asamps; + int dsamps; + int ssamps; + int rsamps; + int asamps_last; + int dsamps_last; + int ssamps_last; + int rsamps_last; + float tempo; + float egain1; + float egain2; + int tempomode; + int beat_subdiv; + int tsamps; + int counter; + float srate; + short manual_override; + float click_gain; // input click sets volume too + short mute; +} t_adsr; + +static void *adsr_new(t_symbol *s, int argc, t_atom *argv); + +t_int *adsr_perform(t_int *w); +void adsr_dsp(t_adsr *x, t_signal **sp); +void adsr_assist(t_adsr *x, void *b, long m, long a, char *s); +void adsr_bang(t_adsr *x); +void adsr_manual_override(t_adsr *x, t_floatarg toggle); +void adsr_list (t_adsr *x, t_atom *msg, short argc, t_atom *argv); +void adsr_tempomode(t_adsr *x, t_atom *msg, short argc, t_atom *argv); +void adsr_set_a(t_adsr *x, t_floatarg f); +void adsr_set_d(t_adsr *x, t_floatarg f); +void adsr_set_s(t_adsr *x, t_floatarg f); +void adsr_set_r(t_adsr *x, t_floatarg f); +void adsr_set_gain1(t_adsr *x, t_floatarg f); +void adsr_set_gain2(t_adsr *x, t_floatarg f); +void set_tempo(t_adsr *x, t_floatarg f); +void adsr_mute(t_adsr *x, t_floatarg f); + +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); + +void adsr_tilde_setup(void){ + adsr_class = class_new(gensym("adsr~"), (t_newmethod)adsr_new, + 0,sizeof(t_adsr), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(adsr_class, t_adsr, x_f); + class_addmethod(adsr_class,(t_method)adsr_dsp,gensym("dsp"),0); + class_addmethod(adsr_class,(t_method)adsr_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_list,gensym("list"),A_GIMME,0); + class_addmethod(adsr_class,(t_method)adsr_set_a,gensym("set_a"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_set_d,gensym("set_d"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_set_s,gensym("set_s"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_set_r,gensym("set_r"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_set_gain1,gensym("set_gain1"),A_FLOAT,0); + class_addmethod(adsr_class,(t_method)adsr_set_gain2,gensym("set_gain2"),A_FLOAT,0); + class_addbang(adsr_class,(t_method)adsr_bang); + potpourri_announce(OBJECT_NAME); +} + + +void adsr_mute(t_adsr *x, t_floatarg f) +{ + x->mute = (short)f; +} + +void adsr_set_gain1(t_adsr *x, t_floatarg f) +{ + x->egain1 = f; + return; +} + +void adsr_set_gain2(t_adsr *x, t_floatarg f) +{ + x->egain2 = f; + return; +} +void adsr_bang(t_adsr *x) { + x->counter = 0; + return; +} +void adsr_set_a(t_adsr *x, t_floatarg f) +{ + + f /= 1000.0; + + x->a = f; + x->asamps = x->a * x->srate; + + if( x->tempomode) { + x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); + if( x->rsamps < 0 ) { + x->rsamps = 0; + } + } else { + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + } + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + return ; +} + +void adsr_set_d(t_adsr *x, t_floatarg f) +{ + f /= 1000.0 ; + + x->d = f; + x->dsamps = x->d * x->srate; + + if( x->tempomode) { + x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); + if( x->rsamps < 0 ) { + x->rsamps = 0; + } + } else { + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + } + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + return ; +} + +void adsr_set_s(t_adsr *x, t_floatarg f) +{ + + f /= 1000.0; + + x->s = f; + x->ssamps = x->s * x->srate; + + if( x->tempomode) { + x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); + if( x->rsamps < 0 ) { + x->rsamps = 0; + } + } else { + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + } + + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + return ; +} + +void adsr_set_r(t_adsr *x, t_floatarg f) +{ + + f /= 1000.0; + + if( x->tempomode) { + return; + } else { + x->r = f; + x->rsamps = x->r * x->srate; + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + } + + return ; +} + +void adsr_list (t_adsr *x, t_atom *msg, short argc, t_atom *argv) +{ + t_atom *fraud; // make compiler happy + fraud = msg; + x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); + if( x->rsamps < 0 ) + x->rsamps = 0; + + x->a = (atom_getfloatarg(0,argc,argv)) * .001; + x->d = (atom_getfloatarg(1,argc,argv)) * .001; + x->s = (atom_getfloatarg(2,argc,argv)) * .001; + x->r = (atom_getfloatarg(3,argc,argv)) * .001; + + x->asamps = x->a * x->srate; + x->dsamps = x->d * x->srate; + x->ssamps = x->s * x->srate; + x->rsamps = x->r * x->srate; + + + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + +} + +static void *adsr_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_adsr *x = (t_adsr *)pd_new(adsr_class); + t_symbol *fraud; // make compiler happy + fraud = s; + outlet_new(&x->x_obj, gensym("signal")); + + + x->srate = sys_getsr(); + if(!x->srate){ + error("zero sampling rate, setting to 44100"); + x->srate = 44100; + } + + x->a = 10; + x->d = 50; + x->s = 100; + x->r = 100; + x->egain1 = .7; + x->egain2 = .1; + atom_arg_getfloat(&x->a,0,argc,argv); + atom_arg_getfloat(&x->d,1,argc,argv); + atom_arg_getfloat(&x->s,2,argc,argv); + atom_arg_getfloat(&x->r,3,argc,argv); + atom_arg_getfloat(&x->egain1,4,argc,argv); + atom_arg_getfloat(&x->egain2,5,argc,argv); + + x->a *= .001; + x->d *= .001; + x->s *= .001; + x->r *= .001; + + x->asamps = x->a * x->srate; + x->dsamps = x->d * x->srate; + x->ssamps = x->s * x->srate; + x->rsamps = x->r * x->srate; + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + + x->counter = 0; + x->click_gain = 0.0; + x->mute = 0; + return x; +} + +t_int *adsr_perform(t_int *w) +{ + t_adsr *x = (t_adsr *) (w[1]); + t_float *in = (t_float *)(w[2]); + t_float *out = (t_float *)(w[3]); + int n = (int) w[4]; + int tsamps = x->tsamps; + int counter = x->counter; + int ebreak1 = x->ebreak1; + int ebreak2 = x->ebreak2; + int ebreak3 = x->ebreak3; + float egain1 = x->egain1; + float egain2 = x->egain2; + int asamps = x->asamps; + int dsamps = x->dsamps; + int ssamps = x->ssamps; + int rsamps = x->rsamps; + // short manual_override = x->manual_override; + float click_gain = x->click_gain; + float etmp; + float env_val; + float input_val; + /*********************************************/ + if(x->mute){ + while(n--) *out++ = 0.0; + return w+5; + } + while(n--) { + input_val = *in++; + if(input_val){ + click_gain = input_val; + counter = 0; + } + + + if( counter < ebreak1 ){ + env_val = (float) counter / (float) asamps; + } else if (counter < ebreak2) { + etmp = (float) (counter - ebreak1) / (float) dsamps; + env_val = (1.0 - etmp) + (egain1 * etmp); + } else if (counter < ebreak3) { + etmp = (float) (counter - ebreak2) / (float) ssamps; + env_val = (egain1 * (1.0 - etmp)) + (egain2 * etmp); + } else if( counter < tsamps ){ + env_val = ((float)(tsamps-counter)/(float)rsamps) * egain2 ; + } else { + env_val = 0.0; + } + if(click_gain && env_val && (click_gain != 1.0) ){ + env_val *= click_gain; + } + *out++ = env_val; + if(counter < tsamps) + counter++; + } + x->counter = counter; + x->click_gain = click_gain; + return (w+5); +} + +void adsr_dsp(t_adsr *x, t_signal **sp) +{ + if(x->srate != sp[0]->s_sr ){ + x->srate = sp[0]->s_sr; + x->asamps = x->a * x->srate; + x->dsamps = x->d * x->srate; + x->ssamps = x->s * x->srate; + x->rsamps = x->r * x->srate; + x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + x->counter = 0; + } + dsp_add(adsr_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + + + + diff --git a/externals/lyonpotpourri/arrayfilt~-help.pd b/externals/lyonpotpourri/arrayfilt~-help.pd new file mode 100755 index 000000000..c17187870 --- /dev/null +++ b/externals/lyonpotpourri/arrayfilt~-help.pd @@ -0,0 +1,145 @@ +#N canvas 814 114 449 293 10; +#X obj 31 238 dac~; +#X obj 31 81 noise~; +#X text 32 36 arrayfilt~ filters a sound with the contents of an array +\, so that filters can be drawn by hand; +#X floatatom 70 144 5 0 0 0 gain - -, f 5; +#X obj 31 178 *~ 0.05; +#N canvas 172 134 1229 589 array-fft-block 0; +#X obj 121 66 inlet~; +#X obj 122 415 outlet~; +#X obj 121 98 windowvec~; +#X obj 121 136 rfft~, f 6; +#X obj 187 464 block~ 1024 8; +#X obj 121 171 cartopol~; +#X obj 122 289 poltocar~; +#X obj 122 319 rifft~; +#X obj 122 382 windowvec~; +#X obj 122 349 *~ 0; +#X obj 290 185 *; +#X msg 242 107 1 1024 8; +#X obj 242 138 unpack f f f; +#X obj 242 217 /; +#X floatatom 242 249 12 0 0 0 - - -, f 12; +#X text 323 250 rescale factor; +#X obj 242 76 loadbang; +#N canvas 0 22 450 278 (subpatch) 0; +#X array arrayfilt1 513 float 3; +#A 0 0.95 0.935714 0.914285 0.909523 0.921429 0.921429 0.921429 0.921429 +0.921429 0.921429 0.914286 0.907143 0.889286 0.885714 0.871429 0.850001 +0.842858 0.840477 0.838096 0.835715 0.832143 0.835714 0.835714 0.835714 +0.835714 0.835714 0.835714 0.835714 0.835714 0.835714 0.835714 0.835714 +0.835714 0.835714 0.842857 0.842857 0.753574 0.757146 0.760717 0.764289 +0.764289 0.764289 0.764289 0.764289 0.764289 0.764289 0.764289 0.757146 +0.757146 0.752384 0.747622 0.74286 0.74286 0.74286 0.74286 0.74286 +0.74286 0.737503 0.732146 0.726788 0.721431 0.714288 0.700002 0.69524 +0.690479 0.685717 0.664288 0.642859 0.624492 0.606124 0.587757 0.569389 +0.551022 0.532654 0.514287 0.428572 0.271429 0.271429 0.271429 0.271429 +0.271429 0.271429 0.271429 0.271429 0.271429 0.265714 0.26 0.254286 +0.248571 0.242857 0.235714 0.228571 0.214285 0.2 0.178571 0.171428 +0.160714 0.114285 0.107142 0.0571415 0.021427 0.0178556 0.0142841 0.00714123 +0.00714123 0.00714123 0.00714123 0.00714123 0.00714123 0.00714123 0.00624837 +0.00535551 0.00446264 0.00356978 0.00267692 0.00178406 0.000891194 +-1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 +-1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 +-1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 +-1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 +-1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 -1.66893e-06 +-1.66893e-06 0.00714123 0.00714123 0.00714123 0.00714123 0.00714123 +0.00714123 0.00714123 0.00714123 0.00714123 0.0142841 0.0142841 0.0142841 +0.0178556 0.021427 0.021427 0.0285699 0.0285699 0.0321414 0.0357128 +0.0357128 0.0428557 0.0428557 0.0428557 0.0428557 0.0428557 0.0428557 +0.0428557 0.0428557 0.0428557 0.0428557 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 +0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0290476 0.0295238 +0.03 0.0304762 0.0309524 0.0314286 0.0319048 0.032381 0.0328572 0.0333334 +0.0338096 0.0342858 0.0347619 0.0352381 0.0357143 0.0357143 0.0357143 +0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0363637 +0.037013 0.0376624 0.0383117 0.0389611 0.0396105 0.0402598 0.0409092 +0.0415585 0.0422079 0.0428572 0.0464287 0.0500001 0.0500001 0.0500001 +0.0500001 0.0500001 0.0500001 0.0500001 0.0500001 0.0517859 0.0535716 +0.0553573 0.057143 0.0607145 0.0642859 0.0642859 0.0642859 0.0642859 +0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 +0.0642859 0.0642859 0.0660717 0.0678574 0.0696431 0.0714288 0.0726193 +0.0738098 0.0750003 0.0761908 0.0773813 0.0785717 0.0785717 0.0785717 +0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0797622 +0.0809527 0.0821432 0.0833337 0.0845242 0.0857146 0.086364 0.0870133 +0.0876627 0.088312 0.0889614 0.0896108 0.0902601 0.0909095 0.0915588 +0.0922082 0.0928575 0.0935069 0.0941562 0.0948056 0.095455 0.0961043 +0.0967537 0.097403 0.0980524 0.0987017 0.0993511 0.1 0.1 0.1 0.1 0.1 +0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 +0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 +0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 +0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 +0.0928575 1 1; +#X coords 0 1 513 0 400 140 1 0 0; +#X restore 525 133 graph; +#X msg 428 432 \; arrayfilt1 const 0; +#X obj 678 443 tabwrite arrayfilt1; +#X msg 678 363 1 \$1; +#X obj 678 400 unpack f f; +#X floatatom 678 324 5 0 0 0 - - -, f 5; +#X text 715 323 set a range of bin gains to 1; +#X text 549 437 zero out array; +#X obj 77 227 arrayfilt~ arrayfilt1; +#X text 644 102 Size the filter to (FFT size / 2) + 1; +#X text 879 103 in this case \, 513; +#X text 934 214 draw into array to change filter properties; +#X text 542 475 flat response; +#X msg 427 469 \; arrayfilt1 const 1; +#X text 120 444 set FFT size to 1024 \, with an overlap of 8; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 5 1; +#X connect 5 0 25 0; +#X connect 5 1 25 1; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 13 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 10 0; +#X connect 12 2 10 1; +#X connect 13 0 14 0; +#X connect 14 0 9 1; +#X connect 16 0 11 0; +#X connect 20 0 21 0; +#X connect 21 0 19 0; +#X connect 21 1 19 1; +#X connect 22 0 20 0; +#X connect 25 0 6 0; +#X connect 25 1 6 1; +#X restore 31 113 pd array-fft-block; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 79 224 A demonstration of using fft primitives with a simple +external that operates on bin magnitudes; +#X connect 1 0 5 0; +#X connect 3 0 4 1; +#X connect 4 0 0 0; +#X connect 4 0 0 1; +#X connect 5 0 4 0; diff --git a/externals/lyonpotpourri/arrayfilt~.c b/externals/lyonpotpourri/arrayfilt~.c new file mode 100755 index 000000000..01f17fc7a --- /dev/null +++ b/externals/lyonpotpourri/arrayfilt~.c @@ -0,0 +1,90 @@ +#include "MSPd.h" + +static t_class *arrayfilt_class; + +/* Pd version of arrayfilt~ */ + +#define OBJECT_NAME "arrayfilt~" +typedef struct _arrayfilt +{ + t_object x_obj; + t_float x_f; + t_word *a_samples; + int a_frames; + t_symbol *arrayname; +} t_arrayfilt; + +void *arrayfilt_new(t_symbol *msg, short argc, t_atom *argv); +void arrayfilt_dsp(t_arrayfilt *x, t_signal **sp); +void arrayfilt_setarray(t_arrayfilt *x); + +void arrayfilt_tilde_setup(void){ + arrayfilt_class = class_new(gensym("arrayfilt~"), (t_newmethod)arrayfilt_new, + 0, sizeof(t_arrayfilt),0,A_GIMME,0); + CLASS_MAINSIGNALIN(arrayfilt_class, t_arrayfilt, x_f); + class_addmethod(arrayfilt_class, (t_method)arrayfilt_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *arrayfilt_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_arrayfilt *x = (t_arrayfilt *)pd_new(arrayfilt_class); + // t_symbol *arrayname; + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->arrayname = atom_getsymbolarg(0, argc, argv); + arrayfilt_setarray(x); + return x; +} + +void arrayfilt_setarray(t_arrayfilt *x) +{ + t_garray *a; + t_symbol *arrayname = x->arrayname; + if (!(a = (t_garray *)pd_findbyclass(arrayname, garray_class))) { + if (*arrayname->s_name) pd_error(x, "arrayflt~: %s: no such array", arrayname->s_name); + } + else { + garray_usedindsp(a); + if (!garray_getfloatwords(a, &x->a_frames, &x->a_samples)) + { + pd_error(x, "%s: bad template for player~", arrayname->s_name); + } + } +} + +t_int *arrayfilt_perform(t_int *w) +{ + int i; + t_arrayfilt *x = (t_arrayfilt *) w[1]; + t_float *mag_in = (t_float *) w[2]; + t_float *phase_in = (t_float *) w[3]; + t_float *mag_out = (t_float *) w[4]; + t_float *phase_out = (t_float *) w[5]; + t_float mag, phase; + t_word *a_samples = x->a_samples; + int a_frames = x->a_frames; + int n = (int) w[6]; + int N2 = n / 2; + + arrayfilt_setarray(x); + + if(a_frames < N2+1) { + goto exit; + } + for(i = 0; i < N2 + 1; i++){ + mag = mag_in[i]; + phase = phase_in[i]; + mag_out[i] = mag * a_samples[i].w_float; + phase_out[i] = phase; + } +exit: + return (w + 7); +} + +void arrayfilt_dsp(t_arrayfilt *x, t_signal **sp) +{ + dsp_add(arrayfilt_perform,6, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/bashfest.h b/externals/lyonpotpourri/bashfest.h new file mode 100755 index 000000000..8cbb87b47 --- /dev/null +++ b/externals/lyonpotpourri/bashfest.h @@ -0,0 +1,185 @@ +#include "MSPd.h" +#include "ugens.h" +#include <string.h> +/* calling codes for DSP modules */ +#define TRANSPOSE 0 +#define RINGMOD 1 +#define FLANGE 2 +#define BUTTER 3 +#define TRUNCATE 4 +#define SWEEPRESON 5 +#define COMB 6 +#define SLIDECOMB 7 +#define REVERB1 8 +#define ELLIPSE 9 +#define COMPDIST 10 +#define FEED1 11 +#define RETRO 12 +#define FLAM1 13 +#define FLAM2 14 +#define EXPFLAM 15 +#define COMB4 16 +#define RINGFEED 17 +#define RESONADSR 18 +#define STV 19 +////// +#define ROOT2 (1.4142135623730950488) +#define PI2 (6.2831853071795862319959) +// #define BUFFER_SIZE (1<<15) +#define LOPASS 0 +#define HIPASS 1 +#define BANDPASS 2 +#define COMBFADE (.04 ) +#define MAXFILTER 12 /*must be at least as big as see below */ +#define ELLIPSE_FILTER_COUNT 11 /*actual number of filters*/ +#define MAX_COEF 48 +#define MY_MAX 2147483647.0 /* for rand() */ +/*data types */ + +typedef struct +{ + float *data;//contains cycle data + int len;//length of array + int p;//position pointer +} t_cycle; + +typedef struct +{ + long phase; // current phase in frames + double phasef; // current phase in frames + float gain; // gain for this note + float gainL;// left gain + float gainR;// right gain + short status;// status of this event slot + float *workbuffer;//sample processing space (both input and output) + float *inbuf;//pointer to input part of workbuffer + float *outbuf;//pointer to output part of workbuffer + int in_start;// location in workbuffer to read from input + int out_start;// location in workbuffer to write output + int sample_frames;//actual size in frames of sample, which changes if it gets bigger + int countdown;//latency counter before we actually start sending out samples + int out_channels; //number of channels per frame of output + short completed;//did the defer call do its thing? + + +} t_event; + +typedef struct _bashfest +{ + t_object x_obj; + float x_f; + float sr; // sampling rate + t_symbol *wavename; // name of waveform buffer + short hosed; // buffers are bad + float fadeout; // fadeout time in sample frames (if truncation) + float sync; // input from groove sync signal + float increment; // read increment + int most_recent_event; // position in array where last note was initiated + long b_nchans; // channels of buffer + long b_valid; // state of buffer + long b_frames; // number of frames in sample buffer + t_word *b_samples; // pointer samples in buffer + int overlap_max; // max number of simultaneous plays + t_event *events; //note attacks + int active_events; // how many currently activated notes? + int buf_samps;//total samples in workbuffer + int halfbuffer;//buf_samps / 2 + int buf_frames;// number of sample frames in workbuffer + int latency_samples;// amount of samples to count down before playing sample + float *params; // parameter list + float *odds;// odds for each process happening + int max_process_per_note;//what it says + int min_process_per_note;//ditto + int new_slot;//position for newest note + float new_gain;//recently assigned gain + short verbose;//toggle Max window error reporting + float work_buffer_size;// size in ms of work buffers + t_cycle tcycle;//contains an optional transposition cycle + short block_dsp;//flag to turn off all dsp and play straight from MSP buffer + short sound_lock;//keep current processed sound in buffer + short grab;//flag to copy immediate processed buffer into MSP buffer + char sound_name[256]; + float *trigger_vec;//stores incoming trigger vectors + int vs;//Max/MSP vector size + + /* stuff for bashfest DSP */ + float *sinewave; + int sinelen; + short mute; + float maxdelay; + float *delayline1; + float *delayline2; + LSTRUCT *eel; // for ellipse processor + float *mini_delay[4]; // small delay lines for allpass filter + float max_mini_delay ; + float *transfer_function; + int tf_len; // length of transfer function + float *feedfunc1; + float *feedfunc2; + float *feedfunc3; + float *feedfunc4; + int feedfunclen; + int flamfunc1len; + float *flamfunc1; + CMIXCOMB *combies; + CMIXADSR *adsr; + float max_comb_lpt; + float *reverb_ellipse_data; + float **ellipse_data; + float *dcflt; + CMIXOSC oscar; + CMIXRESON resies[2]; + +} t_bashfest; + + + +/*function prototypes*/ +void putsine (float *arr, int len); +float boundrand(float min, float max); +void mycombset(float loopt,float rvt,int init,float *a,float srate); +float mycomb(float samp,float *a); +void setweights(float *a, int len); +void delset2(float *a,int *l,float xmax, float srate); +void delput2(float x,float *a,int *l); +float dliget2(float *a,float dwait,int *l,float srate); +void butterLopass( float *in, float *out, float cutoff, int frames, int channels, float srate); +void butterBandpass(float *in, float *out, float center, float bandwidth, int frames,int channels, float srate); +void butterHipass(float *in, float *out, float cutoff, int frames,int channels, float srate); +void butset(float *a); +void lobut(float *a, float cutoff,float SR); +void hibut(float *a, float cutoff, float SR); +void bpbut(float *a, float formant, float bandwidth, float SR); +void butter_filter(float *in,float *out,float *a, int frames, int channels, int channel); +void rsnset2(float cf,float bw,float scl,float xinit,float *a,float srate); +float reson(float x,float *a); + +void ellipset(float *list, LSTRUCT *eel, int *nsects, float *xnorm); +float ellipse(float x, LSTRUCT *eel, int nsects, float xnorm); +float allpass(float samp,float *a); +void init_reverb_data(float *a); +void init_ellipse_data(float **a); + +void setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha); +void setflamfunc1(float *arr, int flen); +void funcgen1(float *outArray, int outlen, float duration, float outMin, float outMax, + float speed1, float speed2, float gain1, float gain2, float *phs1, float *phs2, + float *sine, int sinelen); +void normtab(float *inarr,float *outarr, float min, float max, int len); +float mapp(float in,float imin,float imax,float omin,float omax); +float oscil(float amp,float si,float *farray,int len,float *phs); +void set_dcflt(float *a); + +void set_distortion_table(float *arr, float cut, float max, int len); +float dlookup(float samp,float *arr,int len); +void do_compdist(float *in,float *out,int sampFrames,int nchans,int channel, + float cutoff,float maxmult,int lookupflag,float *table,int range,float bufMaxamp); +float getmaxamp(float *arr, int len); +void buildadsr(CMIXADSR *a); +/*bashfest dsp functions */ +void feed1(float *inbuf, float *outbuf, int in_frames, int out_frames,int channels, float *functab1, + float *functab2,float *functab3,float *functab4,int funclen, + float duration, float maxDelay, t_bashfest *x); +void reverb1me(float *in, float *out, int inFrames, int out_frames, int nchans, + int channel, float revtime, float dry, t_bashfest *x); + void killdc( float *inbuf, int in_frames, int channels, t_bashfest *x); diff --git a/externals/lyonpotpourri/bashfest_dsp.c b/externals/lyonpotpourri/bashfest_dsp.c new file mode 100755 index 000000000..dfed186ce --- /dev/null +++ b/externals/lyonpotpourri/bashfest_dsp.c @@ -0,0 +1,1547 @@ +#include "bashfest.h" + +void transpose(t_bashfest *x, int slot, int *pcount) +{ + float *inbuf; + float *outbuf; + int i; + int iphs = 0; + int ip2; + float m1, m2; + float phs = 0; + int out_frames; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + float *params = x->params; +// float srate = x->sr; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + int buf_frames = x->buf_frames; + float tfac; + + ++(*pcount); + tfac = params[ (*pcount)++ ]; + // out_start MUST BE SET WITH RESPECT TO in_start + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + // fprintf(stderr,"TRANSPOSE: in %d out %d\n", w->in_start, w->out_start); + out_frames = (float) in_frames / tfac ; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + for( i = 0; i < out_frames * channels; i += channels ){ + iphs = phs; + m2 = phs - iphs; + m1 = 1. - m2; + + if( channels == 1 ){ + *outbuf++ = inbuf[iphs] * m1 + inbuf[ iphs + 1] * m2 ; + + } else if( channels == 2 ){ + ip2 = iphs * 2; + *outbuf++ = inbuf[ip2] * m1 + inbuf[ ip2 + 2] * m2 ; + *outbuf++ = inbuf[ip2 + 1] * m1 + inbuf[ ip2 + 3] * m2 ; + } + phs += tfac ; + + } + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + + +void ringmod(t_bashfest *x, int slot, int *pcount) +{ + float *sinewave = x->sinewave; + float *inbuf, *outbuf; + int sinelen = x->sinelen; + int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + float *params = x->params; + float srate = x->sr; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; +// int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + int i; + float phase = 0.0; + float si; + float rmodFreq; + + ++(*pcount); + rmodFreq = params[(*pcount)++]; + + // fprintf(stderr,"-*-*- EXECUTING RINGMOD -*-*-\n"); + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + + si = ((float) sinelen / srate) * rmodFreq ; + +// inbuf = inbuf + in_start ; + + for(i = 0; i < frames*channels; i += channels ){ + *outbuf++ = *inbuf++ * sinewave[(int)phase]; + if( channels == 2 ){ + *outbuf++ = *inbuf++ * sinewave[(int)phase]; + } + phase += si; + while( phase > sinelen ) + phase -= sinelen; + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + +void retrograde(t_bashfest *x, int slot, int *pcount) +{ + + int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// float *params = x->params; +// float srate = x->sr; + int i ; + int swap1, swap2; + float tmpsamp; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + memcpy(outbuf, inbuf, in_frames * channels * sizeof(float) ); + + if( channels == 1 ){ + for(i = 0; i < (frames/2) ; i++ ){ + swap2 = (frames - 1 - i); + tmpsamp = outbuf[i]; + outbuf[i] = outbuf[swap2]; + outbuf[swap2] = tmpsamp; + } + } + + /* this would also work for mono, but we'll save a few multiplies */ + else { + for(i = 0; i < (frames/2) ; i++ ){ + swap1 = i * channels ; + swap2 = (frames - 1 - i) * channels; + tmpsamp = outbuf[swap1]; + outbuf[swap1] = outbuf[swap2]; + outbuf[swap2] = tmpsamp; + ++swap1; + ++swap2; + tmpsamp = outbuf[swap1]; + outbuf[swap1] = outbuf[swap2]; + outbuf[swap2] = tmpsamp; + + } + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void comber(t_bashfest *x, int slot, int *pcount) +{ + int channels = x->events[slot].out_channels; + float *params = x->params; + float srate = x->sr; + float *delayline1 = x->delayline1; + float *delayline2 = x->delayline2; + float max_delay = x->maxdelay ; + int buf_frames = x->buf_frames; + int out_frames ; + float overhang, revtime, delay ; + // float *comb1, *comb2; + int combsamps; + int i; + int fade_frames; + float fadegain; + int fadestart; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + /******************************/ + ++(*pcount); + delay = params[(*pcount)++]; + revtime = params[(*pcount)++]; + overhang = params[(*pcount)++]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + if( delay <= 0.0 ){ + error("comber got bad delay value\n"); + return; + } + if( delay > max_delay ){ + delay = max_delay ; + } + if( overhang < COMBFADE ) + overhang = COMBFADE; + + out_frames = in_frames + overhang * srate ; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + combsamps = delay * srate + 20 ; + mycombset(delay,revtime,0,delayline1,srate); + if( channels == 2 ) + mycombset(delay,revtime,0,delayline2,srate); + + // ADD IN ORIGINAL SIGNAL + for( i = 0; i < in_frames*channels; i += channels){ + *outbuf++ += mycomb(*inbuf++, delayline1); + if( channels == 2 ){ + *outbuf++ += mycomb(*inbuf++,delayline2); + } + } + + for( i = in_frames * channels; i < out_frames*channels; i += channels){ + *outbuf++ = mycomb( 0.0 , delayline1); + if( channels == 2 ){ + *outbuf++ = mycomb( 0.0 , delayline2); + } + } + + fade_frames = COMBFADE * srate; + fadestart = (out_frames - fade_frames) * channels ; + for( i = 0; i < fade_frames * channels; i += channels ){ + fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; + *(inbuf + fadestart + i) *= fadegain; + if(channels == 2){ + *(inbuf + fadestart + i + 1) *= fadegain; + } + } + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + + +} + +void flange(t_bashfest *x, int slot, int *pcount) +{ + int i; + float si; + float mindel, maxdel; + float fac1, fac2; + int dv1[2], dv2[2]; /* cmix bookkeeping */ + float delsamp1, delsamp2 ; + float delay_time; + // float dliget2(); + float speed, feedback, phase, minres, maxres; + float hangover ; + int hangframes ; + +// float *inbuf = x->events[slot].workbuffer; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// int buflen = x->buf_samps; + float *params = x->params; + float srate = x->sr; +// int in_start = x->events[slot].in_start; + float *delayline1 = x->delayline1; + float *delayline2 = x->delayline2; + float max_delay = x->maxdelay ; + float *sinewave = x->sinewave; + int sinelen = x->sinelen ; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + minres = params[(*pcount)++]; + maxres = params[(*pcount)++]; + speed = params[(*pcount)++]; + feedback = params[(*pcount)++]; + phase = params[(*pcount)++]; + + hangover = feedback * 0.25 ; // maybe log relation + hangframes = srate * hangover ; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + + if( minres <= 0. || maxres <= 0. ){ + error("flange: got zero frequency resonances as input"); + return; + } + mindel = 1.0/maxres; + maxdel = 1.0/minres; + + if( maxdel > max_delay ){ + maxdel = max_delay; + error("flange: too large delay time shortened"); + } + + delset2(delayline1, dv1, maxdel,srate); + if( channels == 2 ){ + delset2(delayline2, dv2, maxdel,srate); + } + + + si = ((float) sinelen/srate) * speed ; + + if( phase > 1.0 ){ + phase = 0; + error("flange: given > 1 initial phase"); + } + delsamp1 = delsamp2 = 0; + phase *= sinelen; + fac2 = .5 * (maxdel - mindel) ; + fac1 = mindel + fac2; + + for(i = 0; i < in_frames*channels; i += channels ){ + /* homemade oscillator */ + delay_time = fac1 + fac2 * sinewave[(int) phase]; + if( delay_time < .00001 ){ + delay_time = .00001; + } + phase += si; + while( phase > sinelen ) + phase -= sinelen; + delput2( *inbuf + delsamp1*feedback, delayline1, dv1); + delsamp1 = dliget2(delayline1, delay_time, dv1,srate); + *outbuf++ = (*inbuf++ + delsamp1) ; + if( channels == 2 ){ + delput2( *inbuf+delsamp2*feedback, delayline2, dv2); + delsamp2 = dliget2(delayline2, delay_time, dv2,srate); + *outbuf++ = (*inbuf++ + delsamp2) ; + } + } + /* NOW DO HANGOVER */ + for(i = 0; i < hangframes*channels; i += channels ){ + + delay_time = fac1 + fac2 * sinewave[ (int) phase ]; + if( delay_time < .00001 ){ + delay_time = .00001; + } + phase += si; + while( phase > sinelen ) + phase -= sinelen; + delput2( delsamp1*feedback, delayline1, dv1); + delsamp1 = dliget2(delayline1, delay_time, dv1,srate); + *outbuf++ = delsamp1 ; + if( channels == 2 ){ + delput2( delsamp2*feedback, delayline2, dv2); + delsamp2 = dliget2(delayline2, delay_time, dv2,srate); + *outbuf++ = delsamp2 ; + } + } + x->events[slot].sample_frames += hangframes; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void butterme(t_bashfest *x, int slot, int *pcount) +{ + + int ftype; + float cutoff, cf, bw; + int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + float *params = x->params; + float srate = x->sr; + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; +// int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + + ++(*pcount); + ftype = params[(*pcount)++]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + if(ftype == HIPASS){ + cutoff = params[(*pcount)++]; + butterHipass(inbuf, outbuf, cutoff, frames, channels, srate); + } + else if(ftype == LOPASS){ + cutoff = params[(*pcount)++]; + butterLopass(inbuf, outbuf, cutoff, frames, channels, srate); + } + else if(ftype == BANDPASS){ + cf = params[(*pcount)++]; + bw = params[(*pcount)++]; + butterBandpass(inbuf, outbuf, cf, bw, frames, channels, srate); + } else { + error("%d not a valid Butterworth filter",ftype); + return; + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + + + +void truncateme(t_bashfest *x, int slot, int *pcount) +{ + float shortdur ; + int out_frames; + int i; + float fadegain ; + int fade_frames; + int fadestart; + float fadeout; + int channels = x->events[slot].out_channels; + float *params = x->params; + float srate = x->sr; + + float *inbuf, *outbuf; + int in_start; + int out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + shortdur = params[ (*pcount)++ ]; + fadeout = params[ (*pcount)++ ]; + fade_frames = fadeout * srate ; + out_frames = shortdur * srate ; + if( out_frames >= in_frames ){ + // error("truncation requesting >= original duration, no truncation"); + return; + } + + in_start = x->events[slot].in_start; + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + + if( fade_frames <= 0 ){ + error("truncation with 0 length fade!"); + return; + } + + if( fade_frames > out_frames ){ + error("truncation requested fadeout > new duration, adjusting..."); + fade_frames = out_frames; + } + + memcpy(outbuf, inbuf, in_frames * sizeof(float) ); + + fadestart = (out_frames - fade_frames) * channels ; + + for( i = 0; i < fade_frames * channels; i += channels ){ + fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; + outbuf[fadestart + i] *= fadegain; + if( channels == 2 ){ + outbuf[ fadestart + i + 1] *= fadegain; + } + } + + x->events[slot].sample_frames = out_frames ; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + +// Pd only - not reentrant - appears that sine wave gets screwed up ??? +void sweepreson(t_bashfest *x, int slot, int *pcount) +{ + int i; + float bwfac; + float minfreq, maxfreq, speed, phase; + float q1[5], q2[5]; + float cf, bw; + float si; + float fac1, fac2; +// float inmax, outmax, rescale ; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + float *params = x->params; + float srate = x->sr; + float *sinewave = x->sinewave; + int sinelen = x->sinelen ; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + + ++(*pcount); + minfreq = params[(*pcount)++]; + maxfreq = params[(*pcount)++]; + bwfac = params[(*pcount)++]; + speed = params[(*pcount)++]; + phase = params[(*pcount)++]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + si = ((float) sinelen / srate) * speed ; + + if( phase > 1.0 ){ + phase = 0; + error("sweepreson: given > 1 initial phase"); + } + + phase *= sinelen; + fac2 = .5 * (maxfreq - minfreq) ; + fac1 = minfreq + fac2; + + cf = fac1 + fac2 * sinewave[(int) phase]; + bw = bwfac * cf; + rsnset2( cf, bw, 2.0, 0.0, q1, srate ); + if( channels == 2 ){ + rsnset2( cf, bw, 2.0, 0.0, q2, srate ); + } + + for(i = 0; i < in_frames; i++ ){ + // homemade oscillator + + phase += si; + while( phase >= sinelen ) + phase -= sinelen; + + + fac2 = .5 * (maxfreq - minfreq) ; + fac1 = minfreq + fac2; + + cf = fac1 + fac2 * sinewave[(int) phase]; + bw = bwfac * cf; + if(cf < 10 || cf > 8000 || bw < 1 || srate < 100){ + post("danger values, cf %f bw %f sr %f",cf, bw, srate); + } + rsnset2( cf, bw, 2.0, 1.0, q1, srate ); + // clicks stop if we don't apply filter above, and if attacks come too fast + *outbuf++ = reson(*inbuf++, q1); + + if( channels == 2 ){ + + // rsnset2( cf, bw, 2.0, 1.0, q2, srate ); + *outbuf++ = reson(*inbuf++, q2); + + } + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void slidecomb(t_bashfest *x, int slot, int *pcount) +{ + float overhang, feedback, delay1, delay2; +// int combsamps; + int i; + int fade_frames; + float fadegain; + int fadestart; + int dv1[2], dv2[2]; /* cmix bookkeeping */ + float delsamp1 = 0, delsamp2 = 0; + float m1, m2; + float delay_time; + int out_frames ; + + int channels = x->events[slot].out_channels; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; +// float *sinewave = x->sinewave; +// int sinelen = x->sinelen ; + float max_delay = x->maxdelay; + float *delayline1 = x->delayline1; + float *delayline2 = x->delayline2; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + delay1 = params[(*pcount)++]; + delay2 = params[(*pcount)++]; + feedback = params[(*pcount)++]; + overhang = params[(*pcount)++]; + +// post("del1 %f del2 %f srate %f",delay1,delay2, srate); + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + if( overhang < COMBFADE ) + overhang = COMBFADE; + + + out_frames = in_frames + overhang * srate ; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + delset2(delayline1, dv1, max_delay, srate); + if( channels == 2 ){ + delset2(delayline2, dv2, max_delay, srate); + } + + + + for( i = 0; i < in_frames*channels; i += channels){ + m2 = (float) i / (float) (out_frames * channels) ; + m1 = 1. - m2; + delay_time = delay1 * m1 + delay2 * m2 ; + delput2(*inbuf +delsamp1*feedback, delayline1, dv1); + delsamp1 = dliget2(delayline1, delay_time, dv1, srate); + *outbuf++ = *inbuf++ + delsamp1; + if( channels == 2 ){ + delput2( *inbuf + delsamp2*feedback, delayline2, dv2); + delsamp2 = dliget2(delayline2, delay_time, dv2, srate); + *outbuf++ = *inbuf++ + delsamp2 ; + } + } + + for( i = in_frames * channels; i < out_frames*channels; i += channels){ + m2 = (float) i / (float) (out_frames * channels) ; + m1 = 1. - m2; + delay_time = delay1 * m1 + delay2 * m2 ; + delput2( delsamp1*feedback, delayline1, dv1); + *outbuf++ = delsamp1 = dliget2( delayline1, delay_time, dv1, srate ); + if( channels == 2 ){ + delput2( delsamp2*feedback, delayline2, dv2); + *outbuf++ = delsamp2 = dliget2( delayline2, delay_time, dv2, srate ); + } + } + + fade_frames = COMBFADE * srate; + fadestart = (out_frames - fade_frames) * channels ; + for( i = 0; i < fade_frames * channels; i += channels ){ + fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; + *(outbuf + fadestart + i) *= fadegain; + if( channels == 2 ){ + *(outbuf + fadestart + i + 1) *= fadegain; + } + } + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} +// still a crash whore in Pd: + +void reverb1(t_bashfest *x, int slot, int *pcount) +{ + + float revtime, overhang; + int channel_to_compute; + float drygain; + int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + revtime = params[(*pcount)++]; + if( revtime >= 1. ){ + error("reverb1 does not like feedback values over 1."); + revtime = .99 ; + } + overhang = params[(*pcount)++]; + drygain = params[(*pcount)++]; + + + out_frames = in_frames + srate * overhang; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + + for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { + reverb1me( inbuf, outbuf, in_frames, out_frames, channels, channel_to_compute, revtime, drygain, x); + } + + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void ellipseme(t_bashfest *x, int slot, int *pcount) +{ + int i,j; + int nsects; + float xnorm; + int filtercode ; + float *fltdata; + +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// int buf_frames = x->buf_frames; + float *params = x->params; +// float srate = x->sr; + float **flts = x->ellipse_data; + LSTRUCT *eel = x->eel; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + filtercode = params[(*pcount)++]; + + if( filtercode >= ELLIPSE_FILTER_COUNT ){ + error("there is no %d ellipse data",filtercode); + return; + }; + fltdata = flts[ filtercode ]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + for( j = 0; j < channels; j++) { + ellipset(fltdata,eel,&nsects,&xnorm); + for( i = j; i < in_frames * channels ; i += channels ){ + outbuf[i] = ellipse(inbuf[i], eel, nsects,xnorm); + } + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void feed1me(t_bashfest *x, int slot, int *pcount) +{ +// int i; + float mindelay, maxdelay, speed1, speed2; + float phz1 = .13, phz2 = .251; + float dur; + float minfeedback = .1, maxfeedback = .7; + float desired_dur; + float overhang; + /* main variables */ + +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + int out_frames; + /* process specfic*/ + int flen = x->feedfunclen ; + float *func1 = x->feedfunc1; + float *func2 = x->feedfunc2; + float *func3 = x->feedfunc3; + float *func4 = x->feedfunc4; + float my_max_delay = x->max_mini_delay; + float *sinewave = x->sinewave; + int sinelen = x->sinelen ; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + mindelay = params[ (*pcount)++ ]; + maxdelay = params[ (*pcount)++ ]; + speed1 = params[ (*pcount)++ ]; + speed2 = params[ (*pcount)++ ]; + overhang = params[ (*pcount)++ ]; + + if( maxdelay > my_max_delay ){ + error("feed1: too high max delay, adjusted"); + maxdelay = my_max_delay ; + } + dur = in_frames / srate ; + desired_dur = dur + overhang; + out_frames = srate * desired_dur ; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + funcgen1( func1, flen, desired_dur, mindelay, maxdelay, + speed1, speed2, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); + + phz1 /= (float) flen; phz2 /= (float) flen; + + + funcgen1( func2, flen, desired_dur, mindelay*.5, maxdelay*2.0, + speed1*1.25, speed2*.75, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); + + phz1 /= (float) flen; phz2 /= (float) flen; + + + funcgen1( func3, flen, desired_dur, minfeedback, maxfeedback, + speed1*.35, speed2*1.25, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); + + phz1 /= (float) flen; phz2 /= (float) flen; + + funcgen1( func4,flen, desired_dur, minfeedback, maxfeedback, + speed1*.55, speed2*2.25, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); + + feed1( inbuf, outbuf, in_frames, out_frames, channels, func1, func2, func3, func4, flen, dur, my_max_delay, x); + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void flam1(t_bashfest *x, int slot, int *pcount) +{ +// int channel_to_compute; + int attacks; + float gain2; + float gainatten; + float delay; + float gain = 1.0; + int i, j, k, delaysamps, delayoffset = 0; +// float inputmax; + int delay_frames; + /* main variables */ + float *inbuf; + float *outbuf; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buflen = x->buf_samps; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int out_frames; + int halfbuffer = x->halfbuffer; + /* process specfic*/ + ++(*pcount); + attacks = params[(*pcount)++]; + gain2 = params[(*pcount)++]; + gainatten = params[(*pcount)++]; + delay = params[(*pcount)++]; + + + + if( attacks <= 1 ){ + error("flam1: too few attacks: %d",attacks); + return; + } + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + delay_frames = srate * delay + 0.5; + delaysamps = channels * delay_frames; + out_frames = in_frames + (srate * delay * (float) (attacks - 1)); + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + for( i = 0; i < out_frames * channels; i++ ){ + outbuf[i] = 0.0 ; + } + + for(i = 0; i < attacks; i++ ){ + if(in_frames + delay_frames * i >= out_frames){ + // error("breaking at attack %d",i); + break; + } + for(j = 0; j < in_frames * channels; j += channels ){ + for( k = 0; k < channels; k++ ){ + outbuf[j + k + delayoffset] += *(inbuf +j + k) * gain; + } + } + delayoffset += delaysamps; + if( i == 0 ){ + gain = gain2; + } else { + gain *= gainatten; + } + } + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + +void flam2(t_bashfest *x, int slot, int *pcount) +{ + // int channel_to_compute; + int attacks; + float gain2; + float gainatten; + float delay1,delay2; + float gain = 1.0; + int i, j, k, delaysamps, delayoffset = 0; + int f_endpoint; +// float inputmax, outputmax, rescale; + int delay_frames; + float now = 0.0; + int findex; + float inval; + float curdelay; + /* main variables */ + float *inbuf; + float *outbuf; + int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buflen = x->buf_samps; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int halfbuffer = x->halfbuffer; + float *flamfunc1 = x->flamfunc1; + int flamfunclen = x->flamfunc1len; + /* process specfic*/ + + ++(*pcount); + attacks = params[(*pcount)++]; + gain2 = params[(*pcount)++]; + gainatten = params[(*pcount)++]; + delay1 = params[(*pcount)++]; + delay2 = params[(*pcount)++]; + + if( attacks <= 1 ){ + error("flam2: recieved too few attacks: %d",attacks); + return; + } + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + for( i = 0; i < attacks - 1; i++ ){ + findex = ((float)i/(float)attacks) * (float)flamfunclen ; + inval = flamfunc1[findex]; + curdelay = mapp(inval, 0., 1., delay2, delay1); + now += curdelay; + } + out_frames = in_frames + (srate * now); + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + for( i = 0; i < out_frames * channels; i++ ){ + outbuf[i] = 0.0 ; + } + + f_endpoint = in_frames; + // first time delay_offset is zero + for( i = 0; i < attacks; i++ ){ + findex = ((float)i/(float)attacks) * (float)flamfunclen ; + inval = flamfunc1[findex]; + curdelay = mapp(inval, 0., 1., delay2, delay1); + + delay_frames = srate * curdelay + 0.5; + delaysamps = delay_frames * channels; + if(f_endpoint >= out_frames){ + // error("flam2: breaking at attack %d",i); + break; + } + for(j = 0; j < in_frames * channels; j += channels ){ + for( k = 0; k < channels; k++ ){ + outbuf[j + k + delayoffset] += *(inbuf + j + k) * gain; + } + } + delayoffset += delaysamps; + f_endpoint = in_frames + delayoffset/channels; + if( i == 0 ){ + gain = gain2; + } else { + gain *= gainatten; + } + } + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + +void expflam(t_bashfest *x, int slot, int *pcount) +{ + int attacks; + float gain2; + float gainatten; + float delay1,delay2; + float gain = 1.0; + int i, j, k, delaysamps, delayoffset = 0, f_endpoint; +// float inputmax, outputmax, rescale; + int delay_frames; + float now = 0.0; +// int findex; +// float inval; + float curdelay; + float slope; + /* main variables */ + float *inbuf; + float *outbuf; + int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buflen = x->buf_samps; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int halfbuffer = x->halfbuffer; + float *expfunc = x->feedfunc1; +// int funclen = x->feedfunclen; + /* process specfic*/ + + ++(*pcount); + attacks = params[(*pcount)++]; + gain2 = params[(*pcount)++]; + gainatten = params[(*pcount)++]; + delay1 = params[(*pcount)++]; + delay2 = params[(*pcount)++]; + slope = params[(*pcount)++]; + + if( attacks <= 1 ){ + error("expflam: recieved too few attacks: %d",attacks); + return; + } + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + setExpFlamFunc(expfunc, attacks, delay1, delay2, slope); + + for( i = 0; i < attacks - 1; i++ ){ + now += expfunc[i]; + } + + out_frames = in_frames + (srate * now); + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + + for( i = 0; i < out_frames * channels; i++ ){ + outbuf[i] = 0.0 ; + } + + f_endpoint = in_frames; + + for( i = 0; i < attacks; i++ ){ + curdelay = expfunc[i]; + delay_frames = srate * curdelay + 0.5; + delaysamps = delay_frames * channels; + if(f_endpoint >= out_frames){ + // error("expflam: breaking at attack %d",i); + break; + } + for(j = 0; j < in_frames * channels; j += channels ){ + for( k = 0; k < channels; k++ ){ + outbuf[j + k + delayoffset] += *(inbuf + j + k) * gain; + } + } + delayoffset += delaysamps; + f_endpoint = in_frames + delayoffset/channels; + if( i == 0 ){ + gain = gain2; + } else { + gain *= gainatten; + } + } + + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; +} + +void comb4(t_bashfest *x, int slot, int *pcount) +{ + float overhang, revtime ; + int i, j, k; + int fadeFrames; + float fadegain; + int fadestart; + float input_sample; + float rez; + /* main variables */ + + int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + + /* process specific */ + CMIXCOMB *combies = x->combies; + float maxloop = x->max_comb_lpt; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + for( j = 0; j < 4; j++ ){ + rez = params[(*pcount)++] ; + if( rez == 0.0){ + error("comb4: 0 resonance frequency not allowed"); + return; + } + if( 1./rez > maxloop ){ + error("comb4: %f is too long loop",1./rez); + return; + } + combies[j].lpt = 1. / rez ; + } + + revtime = params[(*pcount)++]; + overhang = params[(*pcount)++]; + if( overhang < COMBFADE ) + overhang = COMBFADE; + out_frames = in_frames + overhang * srate; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + for( j = 0; j < 4; j++ ){ + mycombset( combies[j].lpt, revtime, 0, combies[j].arr, srate); + } + + inbuf = x->events[slot].workbuffer + in_start; + + for( j = 0; j < channels; j++ ){ + for( i = 0; i < in_frames * channels; i += channels ){ + input_sample = *(inbuf + i + j) ; // we can move inside loop + *(outbuf + i + j ) = 0.0; // comment out to leave original sound into it + for( k = 0; k < 4; k++ ){ + *(outbuf + i + j) += mycomb(input_sample, combies[k].arr); + } + } + } + for( i = in_frames * channels; i < out_frames * channels; i += channels ){ + for( j = 0; j < channels; j++ ){ + *(outbuf + i + j) = 0.0; + for( k = 0; k < 4; k++ ){ + *(outbuf +i+j) += mycomb(0.0,combies[k].arr); + } + } + } + fadeFrames = COMBFADE * srate; // ok - this is just the fadeout + fadestart = (out_frames - fadeFrames) * channels ; + for( i = 0; i < fadeFrames * channels; i += channels ){ + fadegain = 1.0 - (float) i / (float) (fadeFrames * channels) ; + *(outbuf + fadestart + i) *= fadegain; + if( channels == 2 ){ + *(outbuf + fadestart + i + 1) *= fadegain; + } + } + killdc(outbuf, out_frames, channels, x); + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void compdist(t_bashfest *x, int slot, int *pcount) +{ + float cutoff, maxmult; + int lookupflag; + int channel_to_compute; + float maxamp; + /* main variables */ + +// int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// int buf_frames = x->buf_frames; + float *params = x->params; +// float srate = x->sr; + /* function specific*/ + int range = x->tf_len; + float *table = x->transfer_function; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + cutoff = params[(*pcount)++]; + maxmult = params[(*pcount)++]; + lookupflag = params[(*pcount)++]; + + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + maxamp = getmaxamp(inbuf, in_frames*channels) ; + + if(lookupflag){ + set_distortion_table(table, cutoff, maxmult, range); + } + + for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { + do_compdist(inbuf, outbuf, in_frames, channels, channel_to_compute, + cutoff, maxmult, lookupflag, table, range, maxamp); + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void ringfeed(t_bashfest *x, int slot, int *pcount) +{ + float overhang; + int i, j; + int fade_frames; + float fadegain; + int fadestart; + float input_sample; + float rez ; + /* main variables */ + int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; + int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + /*function specific*/ + float *sinewave = x->sinewave; + int sinelen = x->sinelen ; + CMIXCOMB *combies = x->combies; + CMIXRESON *resies = x->resies; + CMIXOSC oscar = x->oscar; + float maxloop = x->max_comb_lpt; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + oscar.func = sinewave; + oscar.len = sinelen; + oscar.si = params[(*pcount)++] * ((float)oscar.len / srate); + oscar.phs = 0; + rez = params[(*pcount)++] ; + if( rez > 0 ) + combies[0].lpt = 1. / rez ; + else error("zero comb resonance is bad luck"); + if(combies[0].lpt > maxloop) + error("ringfeed does not appreciate looptimes as large as %f",combies[0].lpt); + + combies[0].rvbt = params[(*pcount)++] ; + if(combies[0].rvbt >= 1.0) { + error("ringfeed dislikes feedback values >= 1"); + combies[0].rvbt = .99 ; + } + resies[0].cf = params[(*pcount)++]; + resies[0].bw = resies[0].cf * params[(*pcount)++]; + overhang = params[(*pcount)++] ; + + inbuf = x->events[slot].workbuffer + in_start; + + for( i = 0; i < channels ; i++ ){ + mycombset( combies[0].lpt, combies[0].rvbt, 0, combies[i].arr,srate); + rsnset2(resies[0].cf, resies[0].bw, RESON_NO_SCL, 0., resies[i].q, srate); + } + + /* MINIMUM OVERHANG */ + + if( overhang < COMBFADE ) + overhang = COMBFADE; + + out_frames = in_frames + overhang * srate ; + if( out_frames > buf_frames / 2 ){ + out_frames = buf_frames / 2 ; + } + /* INPUT LOOP */ + for( i = 0; i < in_frames * channels; i += channels ){ + for( j = 0; j < channels; j++ ){ + input_sample = *(inbuf + i + j ) ; + + input_sample *= oscil(1.0, oscar.si, oscar.func, oscar.len, &oscar.phs); + input_sample += mycomb(input_sample, combies[j].arr); + *(outbuf +i+j) = reson(input_sample, resies[j].q); + } + } + + /* COMB TAILS */ + + for( i = in_frames * channels; i < out_frames * channels; i += channels ){ + for( j = 0; j < channels; j++ ){ + *(outbuf +i+j) = reson(mycomb( 0.0, combies[j].arr), resies[j].q ); + } + } + + /* FADE OUT ON MIX */ + + fade_frames = COMBFADE * srate; + fadestart = (out_frames - fade_frames) * channels ; + for( i = 0; i < fade_frames * channels; i += channels ){ + fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; + *(outbuf + fadestart + i) *= fadegain; + if( channels == 2 ){ + *(outbuf + fadestart + i + 1) *= fadegain; + } + } + x->events[slot].sample_frames = out_frames; + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void resonadsr(t_bashfest *x, int slot, int *pcount) +{ + int i; + float bwfac; + float q1[5], q2[5]; + float cf, bw; + float si; + float notedur; + float phase = 0.; +// int j = 0; + /* main variables */ + +// int out_frames; +// int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; + int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + /*function specific*/ + CMIXADSR *a = x->adsr; + int funclen = a->len; + float *adsrfunc = a->func; + + ++(*pcount); + a->a = params[(*pcount)++]; + a->d = params[(*pcount)++]; + a->r = params[(*pcount)++]; + a->v1 = params[(*pcount)++]; + a->v2 = params[(*pcount)++]; + a->v3 = params[(*pcount)++]; + a->v4 = params[(*pcount)++]; + bwfac = params[(*pcount)++]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + notedur = (float) in_frames / srate ; + a->s = notedur - (a->a+a->d+a->r); + if( a->s <= 0.0 ){ + a->a=a->d=a->s=a->r= notedur/ 4. ; + } + buildadsr(a); + si = ((float) funclen / srate) / notedur ; + + phase = 0; + + rsnset2(adsrfunc[(int)phase], adsrfunc[(int) phase]*bwfac, 2.0, 0.0, q1, srate); + if( channels == 2 ){ + rsnset2( adsrfunc[(int)phase], adsrfunc[(int) phase]*bwfac, 2.0, 0.0, q2, srate ); + } + + for(i = 0; i < in_frames*channels; i += channels ){ + phase += si; + if( phase > funclen - 1) + phase = funclen - 1; /* stop at end of function */ + + cf = adsrfunc[ (int) phase ]; + bw = bwfac * cf ; + rsnset2( cf, bw, 2.0, 1.0, q1, srate ); + outbuf[i] = reson(inbuf[i], q1); + if( channels == 2 ){ + rsnset2( cf, bw, 2.0, 1.0, q2, srate ); + outbuf[i+1] = reson(inbuf[i+1], q2); + } + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + +} + +void stv(t_bashfest *x, int slot, int *pcount) +{ + int i,j; + /* main variables */ + +// int out_frames; + int frames = x->events[slot].sample_frames; + int channels = x->events[slot].out_channels; +// int buf_frames = x->buf_frames; + float *params = x->params; + float srate = x->sr; + /*function specific*/ + float *sinewave = x->sinewave; + int sinelen = x->sinelen ; + float *delayline1 = x->delayline1; + float *delayline2 = x->delayline2; + float max_delay = x->maxdelay ; + CMIXOSC osc1, osc2; // put into main object structure + float mindel, maxdel; + float fac1, fac2; + int dv1[2], dv2[2]; /* cmix bookkeeping */ + float delay_time; + float speed1, speed2, depth ; +// float max; + + float *inbuf, *outbuf; + int in_start = x->events[slot].in_start; + int out_start = x->events[slot].out_start; +// int in_frames = x->events[slot].sample_frames; + int buflen = x->buf_samps; + int halfbuffer = x->halfbuffer; + + ++(*pcount); + speed1 = params[(*pcount)++]; + speed2 = params[(*pcount)++]; + depth = params[(*pcount)++]; + + out_start = (in_start + halfbuffer) % buflen ; + inbuf = x->events[slot].workbuffer + in_start; + outbuf = x->events[slot].workbuffer + out_start; + + mindel = .001; + maxdel = depth; + + if( maxdel > max_delay ){ + maxdel = max_delay; + } + + delset2(delayline1, dv1, max_delay,srate); + delset2(delayline2, dv2, max_delay,srate); + + fac2 = .5 * (maxdel - mindel) ; + fac1 = mindel + fac2; + + osc1.func = sinewave; + osc1.len = sinelen; + osc1.si = ((float) sinelen / srate ) * speed1 ; + osc1.phs = 0; + osc1.amp = fac2; + + osc2.func = sinewave; + osc2.len = sinelen; + osc2.si = ((float) sinelen / srate ) * speed2 ; + osc2.phs = 0; + osc2.amp = fac2; + + if( channels == 1 ){ + for(i = 0, j = 0; i < frames; i++, j+=2 ){ + + delay_time = fac1 + + oscil(osc1.amp, osc1.si, osc1.func, osc1.len, &osc1.phs); + delput2( inbuf[i], delayline1, dv1); + outbuf[j] = dliget2(delayline1, delay_time, dv1,srate); + + delay_time = fac1 + + oscil(osc2.amp, osc2.si, osc2.func, osc2.len, &osc2.phs); + delput2( inbuf[i], delayline2, dv2); + outbuf[j + 1] = dliget2(delayline2, delay_time, dv2,srate); + } + } + else if( channels == 2 ){ + for(i = 0; i < frames*2; i += 2 ){ + delay_time = fac1 + + oscil(osc1.amp, osc1.si, osc1.func, osc1.len, &osc1.phs); + delput2( inbuf[i], delayline1, dv1); + outbuf[i] = dliget2(delayline1, delay_time, dv1,srate); + + delay_time = fac1 + + oscil(osc2.amp, osc2.si, osc2.func, osc2.len, &osc2.phs); + delput2( inbuf[i + 1], delayline2, dv2); + outbuf[i + 1] = dliget2(delayline2, delay_time, dv2,srate); + + } + } + x->events[slot].out_start = in_start; + x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; + x->events[slot].out_channels = 2; // we are now stereo, regardless of what we were before +} diff --git a/externals/lyonpotpourri/bashfest_helper.c b/externals/lyonpotpourri/bashfest_helper.c new file mode 100755 index 000000000..81061ecb4 --- /dev/null +++ b/externals/lyonpotpourri/bashfest_helper.c @@ -0,0 +1,648 @@ +#include "bashfest.h" +#include "stdlib.h" + +void putsine (float *arr, int len); +float boundrand(float min, float max); + + +void putsine (float *arr, int len) +{ + int i; + double twopi; + twopi = 8.0 * atan2(1.,1.); + + for ( i = 0; i < len ; i++) { + *(arr + i) = sin( twopi * i / len); + } +} + +float boundrand(float min, float max) +{ + return min + (max-min) * ((float)rand()/MY_MAX); +} + + +void mycombset(float loopt,float rvt,int init,float *a,float srate) +{ + int j; + + a[0] = (3.0 + (loopt * srate + .5)); + a[1] = rvt; + if(!init) { + for(j=3; j<(int)*a; j++) + a[j] = 0; + a[2] = 3; + } +} + +float mycomb(float samp,float *a) +{ + float temp,*aptr; + if ( a[2] >= (int) a[0]) + a[2] = 3; + aptr = a + (int)a[2]; + a[2]++; + temp = *aptr; + *aptr = *aptr * a[1] + samp; + return(temp); +} + +void setweights(float *a, int len) +{ + float sum = 0.0; + int i; + for(i=0;i<len;i++) + sum += a[i]; + if(sum == 0.0){ + error("zero odds sum"); + } + for(i=0;i<len;i++) + a[i] /= sum; + for(i=1;i<len;i++) + a[i] += a[i-1]; +} + +void delset2(float *a,int *l,float xmax, float srate) +{ + /* delay initialization. a is address of float array, l is size-2 int + * array for bookkeeping variables, xmax, is maximum expected delay */ + + int i; + *l = 0; + *(l+1) = (int)(xmax * srate + .5); + for(i = 0; i < *(l+1); i++) *(a+i) = 0; +} + +void delput2(float x,float *a,int *l) +{ + + /* put value in delay line. See delset. x is float */ + + *(a + (*l)++) = x; + if(*(l) >= *(l+1)) *l -= *(l+1); +} + +float dliget2(float *a,float wait,int *l,float srate) +{ + /* get interpolated value from delay line, wait seconds old */ + register int im1; + float x = wait * srate; + register int i = x; + float frac = x - i; + i = *l - i; + im1 = i - 1; + if(i <= 0) { + if(i < 0) i += *(l+1); + if(i < 0) return(0.); + if(im1 < 0) im1 += *(l+1); + } + return(*(a+i) + frac * (*(a+im1) - *(a+i))); +} + +void butterLopass( float *in, float *out, float cutoff, int frames, int channels, float srate) + +{ + int channel_to_compute; + float data[8]; + + for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { + butset( data ); + lobut(data, cutoff, srate); + butter_filter( in, out, data, frames, channels, channel_to_compute); + } + +} + +void butterBandpass(float *in, float *out, float center, float bandwidth, int frames,int channels, float srate) +{ + int channel_to_compute; + float data[8]; + + for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { + butset( data ); + bpbut(data, center, bandwidth, srate); + butter_filter( in, out, data, frames, channels, channel_to_compute); + } + +} + + +void butterHipass(float *in, float *out, float cutoff, int frames,int channels, float srate) +{ + int channel_to_compute; + float data[8]; + + for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { + butset( data ); + hibut(data, cutoff, srate); + butter_filter( in, out, data, frames, channels, channel_to_compute); + } + +} + +void butset(float *a) +{ + a[6] = a[7] = 0.0; +} + +void lobut(float *a, float cutoff,float SR) +{ + register float c; + + c = 1.0 / tan( PI * cutoff / SR); + a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); + a[2] = a[1] + a[1]; + a[3] = a[1]; + a[4] = 2.0 * ( 1.0 - c*c) * a[1]; + a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; + + +} + +void hibut(float *a, float cutoff, float SR) +{ + + register float c; + + c = tan( PI * cutoff / SR); + a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); + a[2] = -2.0 * a[1]; + a[3] = a[1]; + a[4] = 2.0 * ( c*c - 1.0) * a[1]; + a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; + +} + +void bpbut(float *a, float formant, float bandwidth,float SR) +{ + register float c, d; + + c = 1.0 / tan( PI * bandwidth / SR); + d = 2.0 * cos( 2.0 * PI * formant / SR); + a[1] = 1.0 / ( 1.0 + c); + a[2] = 0.0; + a[3] = -a[1]; + a[4] = - c * d * a[1]; + a[5] = ( c - 1.0) * a[1]; + +} +/* in array can == out array */ + +void butter_filter(float *in,float *out,float *a, int frames, int channels, int channel) +{ + + int i; + float t ,y ; + + for( i = channel ; i < frames * channels; i+= channels ) + { + t = *(in + i) - a[4] * a[6] - a[5] * a[7]; + y = t * a[1] + a[2] * a[6] + a[3] * a[7]; + a[7] = a[6]; + a[6] = t; + *(out + i) = y; + } +} + +void rsnset2(float cf,float bw,float scl,float xinit,float *a,float srate) +{ +// double exp(),cos(),sqrt(); + float c,temp; + if(!xinit) { + a[4] = 0; + a[3] = 0; + } + a[2] = exp(-PI2 * bw/srate); + temp = 1. - a[2]; + c = a[2] + 1; + a[1] = 4. * a[2]/c * cos(PI2 * cf/srate); + if(scl < 0) a[0] = 1; + if(scl) a[0] = sqrt(temp/c*(c*c-a[1]*a[1])); + if(!scl) a[0] = temp*sqrt(1.-a[1]*a[1]/(4.*a[2])); +} + +float reson(float x,float *a) +{ + float temp; + temp = *a * x + *(a+1) * *(a+3) - *(a+2) * *(a+4); + *(a+4) = *(a+3); + *(a+3) = temp; + return(temp); +} + +float allpass(float samp,float *a) +{ + float temp,*aptr; + if ( a[STARTM1] >= (int) a[0]) a[STARTM1] = START; + aptr = a + (int)a[STARTM1]; + a[STARTM1] ++; + temp = *aptr; + *aptr = *aptr * a[1] + samp; + return(temp - a[1] * *aptr); +} + +void init_reverb_data(float *a) +{ + a[0] = 2; + a[1] = -0.61043329; + a[2] = -1.4582246; + a[3] = 1; + a[4] = 0.75887003; + a[5] = 1; + a[6] = -0.6922953; + a[7] = 0; + a[8] = 0; + a[9] = 0.035888535; +} + +void reverb1me(float *in, float *out, int inFrames, int out_frames, int nchans, + int channel, float revtime, float dry, t_bashfest *x) +{ + float dels[4];// stick into main structure + float **alpo = x->mini_delay ; + float a1,a2,a3,a4; + int i; +// int alsmp ; + float *fltdata = x->reverb_ellipse_data; + + int nsects; + float xnorm; + LSTRUCT *eel = x->eel; + + float wet; +// float max; + float srate = x->sr; +// float max_del = x->max_mini_delay ; + + wet = cos(1.570796 * dry); + dry = sin(1.570796 * dry); + + /* combset uses reverb time , mycombset uses feedback */ + for( i = 0; i < 4; i++ ){ + dels[i] = boundrand(.005, .1 ); + if(dels[i] < .005 || dels[i] > 0.1) { + post("reverb1: bad random delay time: %f",dels[i]); + dels[i] = .05; + } + mycombset(dels[i], revtime, 0, alpo[i], srate); + } + + ellipset(fltdata,eel,&nsects,&xnorm); + + for( i = channel ; i < inFrames * nchans; i += nchans ){ + + a1 = allpass(in[i], alpo[0]); + a2 = allpass(in[i], alpo[1]); + a3 = allpass(in[i], alpo[2]); + a4 = allpass(in[i], alpo[3]); + + + out[i] = in[i] * dry + ellipse((a1+a2+a3+a4), eel, nsects,xnorm) * wet; + } + + for( i = channel + inFrames * nchans; i < out_frames * nchans; i += nchans ){ + + a1 = allpass(0.0, alpo[0]); + a2 = allpass(0.0, alpo[1]); + a3 = allpass(0.0, alpo[2]); + a4 = allpass(0.0, alpo[3]); + + out[i] = ellipse((a1+a2+a3+a4), eel, nsects,xnorm) * wet; + + } + +} + +void feed1(float *inbuf, float *outbuf, int in_frames, int out_frames,int channels, float *functab1, + float *functab2,float *functab3,float *functab4,int funclen, + float duration, float maxDelay, t_bashfest *x) +{ + int i; + float srate = x->sr; + float *delayLine1a = x->mini_delay[0]; + float *delayLine2a = x->mini_delay[1]; + float *delayLine1b = x->mini_delay[2]; + float *delayLine2b = x->mini_delay[3]; + int dv1a[2], dv2a[2]; /* cmix bookkeeping */ + int dv1b[2], dv2b[2]; /* cmix bookkeeping */ + float delsamp1a=0, delsamp2a=0 ; + float delsamp1b=0, delsamp2b=0 ; + float delay1, delay2, feedback1, feedback2; + float funcSi, funcPhs; + float putsamp; + + /***************************/ + + funcPhs = 0.; + + // read once during note + + + funcSi = ((float) funclen / srate) / duration ; + + + delset2(delayLine1a, dv1a, maxDelay,srate); + delset2(delayLine2a, dv2a, maxDelay,srate); + + if( channels == 2 ){ + delset2(delayLine1b, dv1b, maxDelay,srate); + delset2(delayLine2b, dv2b, maxDelay,srate); + } + + + for(i = 0; i < out_frames*channels; i += channels ){ + // buffer loop + + delay1 = functab1[ (int) funcPhs ]; + delay2 = functab2[ (int) funcPhs ]; + feedback1 = functab3[ (int) funcPhs ]; + feedback2 = functab4[ (int) funcPhs ]; + + funcPhs += funcSi; + if( funcPhs >= (float) funclen ) + funcPhs = 0; + + putsamp = i < in_frames * channels ? inbuf[i] + delsamp1a*feedback1 : 0.0; + outbuf[i] = putsamp; // zero instead ?? + + delput2( putsamp, delayLine1a, dv1a); + delsamp1a = dliget2(delayLine1a, delay1, dv1a,srate); + + putsamp = delsamp1a+delsamp2a*feedback2 ; + + delput2( putsamp, delayLine2a, dv2a); + delsamp2a = dliget2(delayLine2a, delay2, dv2a, srate); + outbuf[i] += delsamp2a; + + + if( channels == 2 ){ + putsamp = i < in_frames * channels ? inbuf[i+1] + delsamp1a*feedback1 : 0.0; + outbuf[i+1] = putsamp; + delput2( putsamp, delayLine1b, dv1b); + delsamp1b = dliget2(delayLine1b, delay1, dv1b, srate); + putsamp = delsamp1b+delsamp2b*feedback2; + delput2( putsamp, delayLine2b, dv2b); + delsamp2b = dliget2(delayLine2b, delay2, dv2b, srate); + outbuf[i+1] += delsamp2b; + } + + } + +} + +void setflamfunc1(float *arr, int flen) +{ + int i; + float x; + for ( i = 0; i < flen; i++){ + x = (float)i / (float) flen ; + *(arr + i) = ((x - 1) / (x + 1)) * -1. ; + + } +} + + +void setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha) +{ + int i; + + if( alpha == 0 ) + alpha = .00000001 ; + + for ( i = 0; i < flen; i++){ + *(arr + i) = v1 + (v2-v1) * ((1-exp((float)i*alpha/((float)flen-1.)))/(1-exp(alpha))); + } +} + +void funcgen1(float *outArray, int outlen, float duration, float outMin, float outMax, + float speed1, float speed2, float gain1, float gain2, float *phs1, float *phs2, + float *sine, int sinelen) +{ + float si1, si2; + float localSR; + int i; + + localSR = duration * (float) outlen ; + *phs1 *= (float) sinelen; + *phs2 *= (float) sinelen; + si1 = ((float)sinelen/localSR) * speed1; + si2 = ((float)sinelen/localSR) * speed2; + + for( i = 0; i < outlen; i++ ){ + *(outArray + i) = oscil(gain1, si1, sine, sinelen, phs1) ; + *(outArray + i) += oscil(gain2, si2, sine, sinelen, phs2) ; + } + normtab( outArray, outArray, outMin, outMax, outlen); + +} + + +void normtab(float *inarr,float *outarr, float min, float max, int len) +{ + int i; + + float imin=9999999999., imax=-9999999999.; + + for(i = 0; i < len ; i++){ + if( imin > inarr[i] ) + imin = inarr[i]; + if( imax < inarr[i] ) + imax = inarr[i]; + } + for(i = 0; i < len; i++ ) + outarr[i] = mapp(inarr[i], imin, imax, min, max); + +} + +float mapp(float in,float imin,float imax,float omin,float omax) +{ + if( imax == 0.0 ) + { + return 0.0 ; + } + return( omin+((omax-omin)*((in-imin)/(imax-imin))) ); +} + +float oscil(float amp,float si,float *farray,int len,float *phs) +{ + register int i = *phs; + *phs += si; + while(*phs >= len) + *phs -= len; + return(*(farray+i) * amp); +} + +void killdc( float *inbuf, int in_frames, int channels, t_bashfest *x) +{ + int i,j=1; + LSTRUCT *eel = x->eel; + int nsects; + float xnorm; + float *dcflt = x->dcflt; + + /* float dcflt[64] = + {3, -1.9999924 , -1.9992482 , 1.0000000 + , .99928019 , + -1.9999956 , -1.9964080 , 1.0000000 , .99645999 , + -1.9999994 , -1.9805074 , 1.0000000 , .98069401 , + .98817413E+00};*/ + + for( j = 0; j < channels; j++) { + ellipset(dcflt,eel,&nsects,&xnorm); + + for( i = j; i < in_frames * channels ; i += channels ){ + inbuf[i] = ellipse(inbuf[i], eel, nsects,xnorm); + } + } +} + +void set_dcflt(float *a) +{ + a[0] = 3; + a[1] = -1.9999924; + a[2] = -1.9992482; + a[3] = 1; + a[4] = 0.99928019; + a[5] = -1.9999956; + a[6] = -1.996408; + a[7] = 1; + a[8] = 0.99645999; + a[9] = -1.9999994; + a[10] = -1.9805074; + a[11] = 1; + a[12] = 0.98069401; + a[13] = 0.98817413; +} + +void set_distortion_table(float *arr, float cut, float max, int len) +{ + int i, len2; + float samp; + + len2 = len>>1 ; + for( i = len2; i < len; i++ ){ + samp = (float)(i - len2) / (float) len2 ; + if( samp > cut ) + samp = mapp( samp, cut, 1.0, cut, max ); + *(arr + i) = samp; + } + for( i = 0; i < len2; i++ ) + *(arr + i) = - *(arr + len - (i+1)); +} + +float dlookup(float samp,float *arr,int len) +{ + return arr[(int) (((samp+1.0)/2.0) * (float) len)]; + +} + +void do_compdist(float *in,float *out,int sampFrames,int nchans,int channel, + float cutoff,float maxmult,int lookupflag,float *table,int range,float bufMaxamp) +{ + + int i; + + float rectsamp; + + for( i = channel ; i < sampFrames * nchans; i+= nchans ) + { + + if( lookupflag){ + *(out + i) = dlookup( *(in + i)/bufMaxamp, table, range ); + } else { + rectsamp = fabs( *(in + i) ) / bufMaxamp; + if( rectsamp > cutoff ){ + *(in + i) = *(out + i) * + mapp( rectsamp, cutoff, 1.0, cutoff, maxmult); + } + } + } +} + +float getmaxamp(float *arr, int len) +{ + int i; + float max = 0; + + for(i = 0; i < len; i++ ){ + if( fabs(arr[i]) > max ) + max = fabs(arr[i]); + } + return max; +} + +void buildadsr(CMIXADSR *a) +{ + float A = a->a; + float D = a->d; + float S = a->s; + float R = a->r; + float f1 = a->v1; + float f2 = a->v2; + float f3 = a->v3; + float f4 = a->v4; + + int funclen = a->len; + float *func = a->func; + float total; + int ipoint = 0; + int i; + int segs[4]; + float m1,m2; + total = A + D + S + R ; + + segs[0] = (A/total) * funclen; + segs[1] = (D/total) * funclen; + segs[2] = (S/total) * funclen; + segs[3] = funclen - (segs[0]+segs[1]+segs[2]); + + if( f1 > 20000. || f1 < -20000. ){ + f1 = 250.0; + } + if( f2 > 20000. || f2 < -20000. ){ + f2 = 1250.0; + } + if( f3 > 20000. || f3 < -20000. ){ + f3 = 950.0; + } + if( f4 > 20000. || f4 < -20000. ){ + f4 = f1; + } + + if( segs[0] <= 0 || segs[1] <= 0 || segs[2] <= 0 || segs[3] <= 0 ){ + + for( i = 0; i < 4; i++ ){ + segs[i] = funclen / 4; + } + } + + for( i = 0 ; i < segs[0]; i++ ){ + m1 = 1.-(float)i/(float)(segs[0]); + m2 = 1. - m1; + *(func +i ) = f1 * m1 + f2 * m2; + } + ipoint = i; + + for( i = 0 ; i < segs[1]; i++ ){ + m1 = 1.-(float)i/(float)(segs[1]); + m2 = 1. - m1; + *(func + i + ipoint) = f2 * m1 + f3 * m2; + } + ipoint += i; + + for( i = 0 ; i < segs[2]; i++ ){ + m1 = 1.-(float)i/(float)(segs[2]); + m2 = 1. - m1; + *(func + i + ipoint) = f3; + } + ipoint += i; + + for( i = 0 ; i < segs[3]; i++ ){ + m1 = 1.-(float)i/(float)(segs[3]); + m2 = 1. - m1; + *(func + ipoint + i) = f3 * m1 + f4 * m2; + } + ipoint += i; + +} + diff --git a/externals/lyonpotpourri/bashfest~-help.pd b/externals/lyonpotpourri/bashfest~-help.pd new file mode 100755 index 000000000..6af9f919f --- /dev/null +++ b/externals/lyonpotpourri/bashfest~-help.pd @@ -0,0 +1,312 @@ +#N canvas 405 213 512 342 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array bashdrum 16884 float 2; +#X coords 0 1 16884 -1 60 20 1; +#X restore 291 75 graph; +#X obj 146 297 dac~; +#N canvas 696 403 518 368 load-samples 0; +#X obj 41 107 soundfiler; +#X msg 41 39 bang; +#X obj 41 65 openpanel; +#X obj 158 26 loadbang; +#X msg 41 87 read -resize \$1 bashdrum; +#X obj 156 132 loadbang; +#X msg 157 52 read -resize sound/kick_11d.aiff bashdrum; +#X msg 111 161 read -resize sound/hi_c_12b.aiff hihat; +#X msg 148 203 read -resize sound/KR55SNAR.aiff snare; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 6 0; +#X connect 4 0 0 0; +#X connect 5 0 7 0; +#X connect 5 0 8 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X restore 291 110 pd load-samples; +#X floatatom 429 211 5 0 0 0 - - -, f 5; +#X msg 429 183 0.5; +#X obj 429 156 loadbang; +#X obj 146 113 samm~ 120 4; +#N canvas 525 461 474 324 hatter 0; +#X obj 74 99 player~ hihat 1; +#X obj 174 70 sig~ 1; +#X obj 74 47 mask~ 1 0.7 0.7 0.7 1 0 0.5 0.6 1 0.7 1 0 1 0.7 0 0; +#X obj 74 19 inlet~; +#X obj 74 222 vdp~ 500; +#X msg 311 123 44100; +#X msg 266 122 16384; +#X obj 278 148 /; +#X obj 266 97 t b b; +#X floatatom 99 196 10 0 0 0 - - -, f 10; +#X obj 293 73 loadbang; +#X obj 266 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 74 275 outlet~; +#X text 137 223 compensate for bashfest latency; +#X obj 279 179 * 1000; +#X floatatom 135 253 5 0 0 0 - - -, f 5; +#X obj 74 248 *~ 0.15; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 16 0; +#X connect 5 0 7 1; +#X connect 6 0 7 0; +#X connect 7 0 14 0; +#X connect 8 0 6 0; +#X connect 8 1 5 0; +#X connect 9 0 4 1; +#X connect 10 0 8 0; +#X connect 11 0 8 0; +#X connect 14 0 9 0; +#X connect 15 0 16 1; +#X connect 16 0 12 0; +#X restore 82 201 pd hatter; +#N canvas 0 22 450 300 (subpatch) 0; +#X array hihat 9097 float 2; +#X coords 0 1 9097 -1 60 20 1; +#X restore 356 75 graph; +#N canvas 0 22 462 312 metronome-control 0; +#X floatatom 52 88 5 0 0 0 - - -, f 5; +#X msg 51 112 tempo \$1; +#X msg 127 59 120; +#X msg 51 55 60; +#X msg 138 114 pause; +#X msg 190 114 resume; +#X obj 81 150 outlet; +#X msg 92 56 140; +#X connect 0 0 1 0; +#X connect 1 0 6 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 7 0 0 0; +#X restore 146 73 pd metronome-control; +#N canvas 441 424 622 472 processor-control 0; +#X obj 169 182 outlet; +#N canvas 301 93 925 625 set-processor-odds 0; +#X obj 87 552 outlet; +#X msg 392 170 setodds 0 0 0 0 0 1; +#X text 543 169 sweepreson; +#X msg 391 316 setodds 0 0 0 0 0 0 0 0 0 0 0 1; +#X msg 388 481 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X msg 391 447 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X msg 388 509 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 708 509 resonadsr; +#X msg 387 535 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 468 51 transpose; +#X msg 393 54 setodds 1; +#X text 485 75 ringmod; +#X msg 394 76 setodds 0 1; +#X text 518 145 truncate; +#X msg 393 145 setodds 0 0 0 0 1; +#X msg 393 239 setodds 0 0 0 0 0 0 0 0 1; +#X msg 86 160 flatodds; +#X text 362 8 Processors by position in list. Any list combination +will select a set of processors in specified weighting for random selection. +; +#X text 493 99 flange; +#X msg 392 100 setodds 0 0 1; +#X text 514 121 butterworth filters; +#X msg 394 120 setodds 0 0 0 1; +#X msg 394 192 setodds 0 0 0 0 0 0 1; +#X text 545 191 comb; +#X text 565 214 slidecomb; +#X msg 393 215 setodds 0 0 0 0 0 0 0 1; +#X text 586 239 reverb; +#X msg 392 265 setodds 0 0 0 0 0 0 0 0 0 1; +#X text 590 268 elliptical filters; +#X msg 392 291 setodds 0 0 0 0 0 0 0 0 0 0 1; +#X text 608 293 distortion/compression; +#X text 615 313 feedback; +#X msg 390 343 setodds 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 624 342 reverse; +#X msg 390 367 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 649 366 flam1; +#X msg 390 391 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 664 391 flam2; +#X msg 390 417 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; +#X text 671 419 expflam; +#X text 688 442 comb4; +#X text 700 479 ringmod/feedback; +#X text 722 535 stereo vdelay; +#X msg -21 73 setodds 0.25 0.5 1 0 0 1 0.2 0 0 1 1 0.1 0.1 0 0 0.3 +; +#X msg -12 96 setodds 1 1 1 1 1 1 1 1 0 1 1 0 1 0.2 0.2 0.2 1 1 1 1 +; +#X text 2 53 a couple distributions; +#X text 85 141 equal distribution; +#X connect 1 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 10 0 0 0; +#X connect 12 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 0 0; +#X connect 19 0 0 0; +#X connect 21 0 0 0; +#X connect 22 0 0 0; +#X connect 25 0 0 0; +#X connect 27 0 0 0; +#X connect 29 0 0 0; +#X connect 32 0 0 0; +#X connect 34 0 0 0; +#X connect 36 0 0 0; +#X connect 38 0 0 0; +#X connect 43 0 0 0; +#X connect 44 0 0 0; +#X restore 170 80 pd set-processor-odds; +#N canvas 0 22 466 316 efficiency 0; +#X msg 53 138 mute \$1; +#X obj 53 98 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 168 119 block_dsp \$1; +#X obj 169 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 139 182 outlet; +#X text 211 93 turn off dsp; +#X text 54 81 mute object; +#X connect 0 0 4 0; +#X connect 1 0 0 0; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X restore 284 155 pd efficiency; +#N canvas 415 474 641 390 process-amount 0; +#X obj 78 207 outlet; +#N canvas 680 241 454 304 setodds 0; +#X msg 124 131 minimum_process \$1; +#X obj 158 91 unpack f f; +#X msg 294 131 maximum_process \$1; +#X obj 125 163 outlet; +#X obj 159 58 inlet; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 1 1 2 0; +#X connect 2 0 3 0; +#X connect 4 0 1 0; +#X restore 79 165 pd setodds; +#X msg 79 130 0 1; +#X msg 36 130 0 0; +#X msg 120 131 1 1; +#X msg 156 131 1 2; +#X text 162 164 set minimum and maximum processing iterations.; +#X text 164 185 More processing means cooler sounds \, but could; +#X msg 194 131 2 4; +#X text 163 205 also overtax your CPU.; +#X obj 120 94 loadbang; +#X msg 234 133 4 8; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 1 0; +#X connect 8 0 1 0; +#X connect 10 0 4 0; +#X connect 11 0 1 0; +#X restore 207 116 pd process-amount; +#X msg 75 135 grab; +#X text 17 103 grab new sound from current processing; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X restore 6 74 pd processor-control; +#N canvas 0 22 450 300 (subpatch) 0; +#X array snare 9284 float 2; +#X coords 0 1 9284 -1 60 20 1; +#X restore 420 75 graph; +#X obj 146 178 bashfest~ snare 2000 16384 12; +#X obj 146 139 mask~ 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1; +#N canvas 46 411 513 413 bassdrum 0; +#X obj 156 100 sig~ 1; +#X obj 35 7 inlet~; +#X obj 35 270 vdp~ 500; +#X msg 272 178 44100; +#X msg 227 177 16384; +#X obj 239 203 /; +#X obj 227 152 t b b; +#X floatatom 61 243 10 0 0 0 - - -, f 10; +#X obj 254 128 loadbang; +#X obj 227 130 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 35 353 outlet~; +#X text 98 271 compensate for bashfest latency; +#X floatatom 73 308 5 0 0 0 - - -, f 5; +#X obj 239 226 * 1000; +#X obj 35 147 player~ bashdrum 1; +#X obj 35 36 mask~ 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 0; +#X obj 35 327 *~ 0.4; +#X obj 77 292 hsl 90 8 0 0.5 0 0 empty empty empty -2 -8 0 10 -261820 +-1 -1 0 1; +#X connect 0 0 14 1; +#X connect 1 0 15 0; +#X connect 2 0 16 0; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 13 0; +#X connect 6 0 4 0; +#X connect 6 1 3 0; +#X connect 7 0 2 1; +#X connect 8 0 6 0; +#X connect 9 0 6 0; +#X connect 12 0 16 1; +#X connect 13 0 7 0; +#X connect 14 0 2 0; +#X connect 15 0 14 0; +#X connect 16 0 10 0; +#X connect 17 0 12 0; +#X restore 7 202 pd bassdrum; +#X obj 146 223 *~ 0.4; +#X obj 200 224 *~ 0.4; +#N canvas 0 22 458 308 stereo-mix 0; +#X obj 91 54 inlet~; +#X obj 186 60 inlet~; +#X obj 91 166 outlet~; +#X obj 186 160 outlet~; +#X obj 91 107 *~ 0.2; +#X obj 186 109 *~ 0.2; +#X obj 301 47 inlet; +#X floatatom 301 73 5 0 0 0 - - -, f 5; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 5 1; +#X connect 7 0 4 1; +#X restore 146 266 pd stereo-mix; +#X obj 266 247 hsl 100 12 0 1 0 0 empty empty gain -2 -8 0 10 -261820 +-1 -1 0 1; +#X text 3 41 bashfest~ is a click triggered soundfile player with random +DSP., f 65; +#X text 153 159 args: array \, maxdur \, latency \, voices; +#X obj 3 5 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X connect 3 0 15 1; +#X connect 3 0 16 1; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 13 0; +#X connect 6 0 7 0; +#X connect 6 0 14 0; +#X connect 7 0 17 1; +#X connect 7 0 17 0; +#X connect 9 0 6 0; +#X connect 10 0 12 0; +#X connect 12 0 15 0; +#X connect 12 1 16 0; +#X connect 13 0 12 0; +#X connect 14 0 17 1; +#X connect 14 0 17 0; +#X connect 15 0 17 0; +#X connect 16 0 17 1; +#X connect 17 0 1 0; +#X connect 17 1 1 1; +#X connect 18 0 17 2; diff --git a/externals/lyonpotpourri/bashfest~.c b/externals/lyonpotpourri/bashfest~.c new file mode 100755 index 000000000..8055eced3 --- /dev/null +++ b/externals/lyonpotpourri/bashfest~.c @@ -0,0 +1,1357 @@ +#import "MSPd.h" +#include "bashfest.h" +#include <string.h> + +/* THIS IS PROBABLY THE LIMITING FACTOR FOR LARGE BUFFER SIZES + SO, MAKE THIS A PARAMETER, -OR- BUFFER THE INPUT TRIGGER ITSELF!!! + */ +#define DEFAULT_MAX_OVERLAP (8) // number of overlapping instances allowed +#define ACTIVE 0 +#define INACTIVE 1 +#define MAX_VEC 2048 +#define DEFAULT_BUFFER_SIZE 4000.0 // 4 second default buffer size * 2 +#define DEFAULT_LATENCY 8192 //latency in samples after a trigger for note to start +#define MAX_PARAMETERS 2048 +#define PROCESS_COUNT 20 +#define CYCLE_MAX 1024 + +#define OBJECT_NAME "bashfest~" + + +static t_class *bashfest_class; + +void *bashfest_new(t_symbol *msg, short argc, t_atom *argv); +t_int *bashfest_perform_hosed(t_int *w); +void bashfest_dsp(t_bashfest *x, t_signal **sp); +void bashfest_dsp_free(t_bashfest *x); +int bashfest_set_parameters(t_bashfest *x,float *params); +t_int *bashfest_perform(t_int *w); +void bashfest_deploy_dsp(t_bashfest *x); +void bashfest_copy_to_MSP_buffer(t_bashfest *x, int slot); +/*user messages*/ +void bashfest_stop(t_bashfest *x); +void bashfest_info(t_bashfest *x); +void bashfest_mute(t_bashfest *x, t_floatarg t); +void bashfest_maximum_process(t_bashfest *x, t_floatarg n); +void bashfest_minimum_process(t_bashfest *x, t_floatarg n); +void bashfest_setbuf(t_bashfest *x, t_symbol *wavename); +void bashfest_flatodds(t_bashfest *x); +void bashfest_killproc(t_bashfest *x, long p); +void bashfest_soloproc(t_bashfest *x, long p); +void bashfest_latency(t_bashfest *x, long n); +void bashfest_verbose(t_bashfest *x, long t); +void bashfest_block_dsp(t_bashfest *x, t_floatarg t); +void bashfest_gozero(t_bashfest *x); +void bashfest_grab(t_bashfest *x); +void bashfest_setodds(t_bashfest *x,t_symbol *msg, short argc, t_atom *argv); +void bashfest_tcycle(t_bashfest *x,t_symbol *msg, short argc, t_atom *argv); +/* function code */ + +void killdc( float *inbuf, int in_frames, int channels, t_bashfest *x); + +void ringmod(t_bashfest *x, int slot, int *pcount); +void retrograde(t_bashfest *x, int slot, int *pcount); +void comber(t_bashfest *x, int slot, int *pcount); +void transpose(t_bashfest *x, int slot, int *pcount); +void flange(t_bashfest *x, int slot, int *pcount); +void butterme(t_bashfest *x, int slot, int *pcount); +void truncateme(t_bashfest *x, int slot, int *pcount); +void sweepreson(t_bashfest *x, int slot, int *pcount); +void slidecomb(t_bashfest *x, int slot, int *pcount); +void reverb1(t_bashfest *x, int slot, int *pcount); +void ellipseme(t_bashfest *x, int slot, int *pcount); +void feed1me(t_bashfest *x, int slot, int *pcount); +void flam1(t_bashfest *x, int slot, int *pcount); +void flam2(t_bashfest *x, int slot, int *pcount); +void expflam(t_bashfest *x, int slot, int *pcount); +void comb4(t_bashfest *x, int slot, int *pcount); +void ringfeed(t_bashfest *x, int slot, int *pcount); +void resonadsr(t_bashfest *x, int slot, int *pcount); +void stv(t_bashfest *x, int slot, int *pcount); +void compdist(t_bashfest *x, int slot, int *pcount); + + +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); + + + + +void bashfest_tilde_setup(void) +{ + bashfest_class = class_new(gensym("bashfest~"),(t_newmethod)bashfest_new,(t_method)bashfest_dsp_free, sizeof(t_bashfest), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(bashfest_class,t_bashfest, x_f ); + class_addmethod(bashfest_class,(t_method)bashfest_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(bashfest_class,(t_method)bashfest_setbuf,gensym("setbuf"),A_SYMBOL,0); + class_addmethod(bashfest_class,(t_method)bashfest_stop,gensym("stop"),0); + class_addmethod(bashfest_class,(t_method)bashfest_flatodds,gensym("flatodds"),0); + class_addmethod(bashfest_class,(t_method)bashfest_soloproc,gensym("soloproc"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_killproc,gensym("killproc"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_latency,gensym("latency"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_verbose,gensym("verbose"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_setodds,gensym("setodds"),A_GIMME,0); + class_addmethod(bashfest_class,(t_method)bashfest_tcycle,gensym("tcycle"),A_GIMME,0); + class_addmethod(bashfest_class,(t_method)bashfest_gozero,gensym("gozero"),0); + class_addmethod(bashfest_class,(t_method)bashfest_grab,gensym("grab"),0); + class_addmethod(bashfest_class,(t_method)bashfest_maximum_process,gensym("maximum_process"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_minimum_process,gensym("minimum_process"),A_FLOAT,0); + class_addmethod(bashfest_class,(t_method)bashfest_block_dsp,gensym("block_dsp"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + + +void bashfest_block_dsp(t_bashfest *x, t_floatarg t) +{ + + x->block_dsp = (short)t; + +} +void bashfest_maximum_process(t_bashfest *x, t_floatarg n) +{ + if(n < 0){ + error("illegal val to maximum_process"); + return; + } + x->max_process_per_note = (int)n; +} + +void bashfest_minimum_process(t_bashfest *x, t_floatarg n) +{ + if(n < 0){ + error("illegal val to minimum_process"); + return; + } + x->min_process_per_note = (int)n; +} + +void bashfest_verbose(t_bashfest *x, long t) +{ + x->verbose = t; +} +void bashfest_latency(t_bashfest *x, long n) +{ + if(n < x->vs){ + error("latency cannot be less than %d",x->vs); + return; + } + /* if(n > x->latency_samples){ + x->trigger_buffer = (float *) realloc(x->trigger_buffer, n * sizeof(float)); + } + x->tb_inpt = 0; + x->tb_outpt = x->latency_samples - x->vs;*/ + x->latency_samples = n; +} + +void bashfest_stop(t_bashfest *x) +{ + int i; + + for(i = 0; i < x->overlap_max; i++){ + x->events[i].status = INACTIVE; + } +} + + +void bashfest_mute(t_bashfest *x, t_floatarg t) +{ + x->mute = (short)t; +} + + +void bashfest_grab(t_bashfest *x) +{ + x->grab = 1; +} + +void bashfest_tcycle(t_bashfest *x,t_symbol *msg, short argc, t_atom *argv) +{ + t_cycle tcycle = x->tcycle; + int i; + float data=1.0; + + if(argc < 1){ + error("no data for tcycle!"); + return; + } else if(argc > CYCLE_MAX){ + error("%d is the maximum size tcycle",CYCLE_MAX); + return; + } + x->tcycle.len = argc; + x->tcycle.p = 0; + for(i=0;i<argc;i++){ + atom_arg_getfloat(&data,i,argc,argv); + if(data <= 0.0){ + error("bad data for tcycle:%f",data); + } else { + tcycle.data[i] = data; + } + } +} + +void bashfest_gozero(t_bashfest *x) +{ + x->tcycle.p = 0; +} + +void bashfest_setodds(t_bashfest *x,t_symbol *msg, short argc, t_atom *argv) +{ + int i; + + if(argc > PROCESS_COUNT){ + error("there are only %d processes",PROCESS_COUNT); + return; + } + for(i=0;i<PROCESS_COUNT;i++){ + x->odds[i] = 0.0; + } + + + for(i=0;i<argc;i++){ + x->odds[i] = atom_getfloatarg(i,argc,argv); + } + + setweights(x->odds,PROCESS_COUNT); +} + +void bashfest_soloproc(t_bashfest *x, long p) +{ + int i; + if(p < 0 || p >= PROCESS_COUNT){ + error("bad %d",p); + } + for(i=0;i<PROCESS_COUNT;i++){ + x->odds[i] = 0.0; + } + x->odds[p] = 1.0; + setweights(x->odds,PROCESS_COUNT); +} + +void bashfest_killproc(t_bashfest *x, long p) +{ + int i; + if(p < 0 || p >= PROCESS_COUNT){ + error("bad %d",p); + } + for(i=0;i<PROCESS_COUNT;i++){ + x->odds[i] = 1.0; + } + x->odds[p] = 0.0; + setweights(x->odds,PROCESS_COUNT); +} + +void bashfest_flatodds(t_bashfest *x) +{ + int i; + for(i=0;i<PROCESS_COUNT;i++){ + x->odds[i] = 1.0; + } + setweights(x->odds,PROCESS_COUNT); +} + + +void *bashfest_new(t_symbol *msg, short argc, t_atom *argv) +{ + + t_bashfest *x = (t_bashfest *)pd_new(bashfest_class); + // outlet_new(&x->x_obj, gensym("signal")); + + int i; + long membytes = 0; + float tmpfloat; + srand(time(0)); + + x->sr = sys_getsr(); + x->vs = sys_getblksize(); + if(! x->sr) + x->sr = 44100; + + + x->work_buffer_size = DEFAULT_BUFFER_SIZE; + // x->latency_samples = DEFAULT_LATENCY; + // x->overlap_max = DEFAULT_MAX_OVERLAP; + + /* argument list: buffer name, work buffer duration, latency in samples, number of overlaps */ + atom_arg_getsym(&x->wavename,0,argc,argv); + atom_arg_getfloat(&x->work_buffer_size,1,argc,argv); + tmpfloat = DEFAULT_LATENCY; + atom_arg_getfloat(&tmpfloat,2,argc,argv); + x->latency_samples = tmpfloat; + tmpfloat = DEFAULT_MAX_OVERLAP; + atom_arg_getfloat(&tmpfloat,3,argc,argv); + x->overlap_max = tmpfloat; + + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->sinelen = 8192; + + x->verbose = 0; + x->most_recent_event = 0; + x->active_events = 0; + x->increment = 1.0; + x->block_dsp = 0; + x->grab = 0; + /* + x->tb_inpt = 0; + if(x->latency_samples < x->vs){ + x->latency_samples = x->vs;//might need x->vs * 2 here + error("latency forced to %d samples",x->vs); + } + x->tb_outpt = x->latency_samples - x->vs; + */ + /* buffer contains space for both input and output, thus factor of 2 */ + x->buf_frames = 2 * x->work_buffer_size * .001 * x->sr; + + x->buf_samps = x->buf_frames * 2; + x->halfbuffer = x->buf_samps / 2; + + x->maxdelay = 1.0; // in seconds + /*memory allocation */ + x->events = (t_event *) t_getbytes(x->overlap_max * sizeof(t_event)); + x->trigger_vec = (float *) t_getbytes(MAX_VEC * sizeof(float)); + x->sinewave = t_getbytes(x->sinelen * sizeof(float)); + x->params = t_getbytes(MAX_PARAMETERS * sizeof(float)); + x->odds = t_getbytes(64 * sizeof(float)); + // x->trigger_buffer = calloc(x->latency_samples, sizeof(float)); + + for(i=0;i<64;i++) + x->odds[i] = 0; + putsine(x->sinewave, x->sinelen); + for(i=0;i<x->overlap_max;i++){ + x->events[i].workbuffer = (float *) t_getbytes(x->buf_samps * sizeof(float)); + } + x->delayline1 = (float *) t_getbytes(x->maxdelay * x->sr * sizeof(float)); + x->delayline2 = (float *) t_getbytes(x->maxdelay * x->sr * sizeof(float)); + x->max_mini_delay = .25; + x->eel = (LSTRUCT *) t_getbytes(MAXSECTS * sizeof(LSTRUCT)); + for( i = 0; i < 4 ; i++ ){ + x->mini_delay[i] = + (float *) t_getbytes(((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float)); + } + x->reverb_ellipse_data = (float *) t_getbytes(16 * sizeof(float)); + + x->ellipse_data = (float **) t_getbytes(MAXFILTER * sizeof(float *)); + for(i=0;i<MAXFILTER;i++){ + x->ellipse_data[i] = (float *) t_getbytes(MAX_COEF * sizeof(float)); + } + x->tf_len = 1; + x->tf_len <<= 16; + x->transfer_function = (float *) t_getbytes(x->tf_len * sizeof(float) ); + x->feedfunclen = 8192 ; + x->feedfunc1 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); + x->feedfunc2 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); + x->feedfunc3 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); + x->feedfunc4 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); + x->flamfunc1len = 8192 ; + x->flamfunc1 = (float *) t_getbytes( x->flamfunc1len * sizeof(float)); + setflamfunc1(x->flamfunc1,x->flamfunc1len); + x->max_comb_lpt = 0.15 ;// watch out here + x->combies = (CMIXCOMB *) t_getbytes(4 * sizeof(CMIXCOMB)); + for( i = 0; i < 4; i++ ){ + x->combies[i].len = x->sr * x->max_comb_lpt + 2; + x->combies[i].arr = (float *) t_getbytes(x->combies[i].len * sizeof(float)); + } + x->adsr = (CMIXADSR *) t_getbytes(1 * sizeof(CMIXADSR)); + x->adsr->len = 32768 ; + x->adsr->func = (float *) t_getbytes(x->adsr->len * sizeof(float) ); + x->dcflt = (float *) t_getbytes(16 * sizeof(float)); + x->tcycle.data = (float *) t_getbytes(CYCLE_MAX * sizeof(float)); + x->tcycle.len = 0; + for(i=0;i<x->overlap_max;i++){ + x->events[i].phasef = x->events[i].phase = 0.0; + } + + membytes = x->overlap_max * sizeof(t_event); + membytes += x->sinelen * sizeof(float); + membytes += MAX_PARAMETERS * sizeof(float); + membytes += 64 * sizeof(float); + membytes += x->buf_samps * sizeof(float) * x->overlap_max; + membytes += x->maxdelay * x->sr * sizeof(float) * 2; + membytes += MAXSECTS * sizeof(LSTRUCT); + membytes += ((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float) * 4; + membytes += 16 * sizeof(float); + membytes += MAXFILTER * sizeof(float *); + membytes += MAX_COEF * sizeof(float) * MAXFILTER; + membytes += x->tf_len * sizeof(float); + membytes += x->feedfunclen * sizeof(float) * 4; + membytes += x->flamfunc1len * sizeof(float); + membytes += 4 * sizeof(CMIXCOMB); + membytes += x->combies[0].len * sizeof(float) * 4; + membytes += sizeof(CMIXADSR); + membytes += x->adsr->len * sizeof(float); + membytes += 16 * sizeof(float); + membytes += CYCLE_MAX * sizeof(float); + + // post("total memory for this bashfest %.2f MBytes",(float)membytes/1000000.); + + /* be sure to finish clearing memory */ + set_dcflt(x->dcflt); + init_reverb_data(x->reverb_ellipse_data); + init_ellipse_data(x->ellipse_data); + + for(i=0;i<PROCESS_COUNT;i++){ + x->odds[i] = 1; + } + + + x->max_process_per_note = 2; + setweights(x->odds,PROCESS_COUNT); + + + x->mute = 0; + + for(i = 0; i < x->overlap_max; i++){ + x->events[i].status = INACTIVE; + } + + + return (x); +} + + + + +void bashfest_setbuf(t_bashfest *x, t_symbol *wavename) +{ + t_garray *a; + x->hosed = 0; + x->b_frames = 0; + x->b_nchans = 1; + x->b_valid = 0; + int b_frames; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "bashfest~: %s: no such array", + wavename->s_name); + x->b_samples = 0; + x->hosed = 1; + } + else if (!garray_getfloatwords(a, &b_frames, &x->b_samples)) { + pd_error(x, "%s: bad array for bashfest~", wavename->s_name); + x->b_samples = 0; + x->hosed = 1; + } + else { + x->b_frames = (long)b_frames; + // post("%d frames in buffer %s",x->b_frames, wavename->s_name); + garray_usedindsp(a); + x->b_valid = 1; + } + +} + + + +t_int *bashfest_perform_hosed(t_int *w) +{ + + // t_bashfest *x = (t_bashfest *) (w[1]); + // float *trigger = (t_float *)(w[2]); + float *outchanL = (t_float *)(w[3]); + float *outchanR = (t_float *)(w[4]); + int n = (int) w[5]; + + // try bzero + // while(n--) *outchanL++ = *outchanR++ = 0.0; + memset((char *)outchanL, 0, sizeof(float) * n); + memset((char *)outchanR, 0, sizeof(float) * n); + return(w+6); + +} + +/* modified for dsp turnoff*/ + +t_int *bashfest_perform(t_int *w) +{ + t_bashfest *x = (t_bashfest *) (w[1]); + float *t_vec = (t_float *)(w[2]); + float *outchanL = (t_float *)(w[3]); + float *outchanR = (t_float *)(w[4]); + int n = (int) w[5]; + + t_word *b_samples; + long b_nchans; +// long b_valid; + long b_frames; + + t_event *events = x->events; + // int active_events = x->active_events; + float increment = x->increment; + int overlap_max = x->overlap_max; + int iphase; + int flimit; + short insert_success; + int new_insert; + int i,j,k; + t_cycle tcycle = x->tcycle; + float gain; + // short bail; + float frac; + float samp1, samp2; + float maxphase; + int theft_candidate; + int out_channels; + float *processed_drum; + char *sound_name = x->sound_name; + + int latency_samples = x->latency_samples; + float *trigger_vec = x->trigger_vec; + + for(i = 0; i < n; i++) + trigger_vec[i] = t_vec[i]; + + if(x->mute || x->hosed){ + while(n--) { + *outchanL++ = *outchanR++ = 0.0; + } + return(w+6); + } + bashfest_setbuf(x, x->wavename); + + if(! x->b_valid) { + while(n--) { + *outchanL++ = *outchanR++ = 0.0; + } + return(w+6); + } + + b_samples = x->b_samples; + b_frames = x->b_frames; + b_nchans = 1; // for Pd + + if(x->block_dsp){ + /* computation savings if processing is blocked */ + + + /* preliminary transposition will be set here */ + + if(tcycle.len > 0){ + increment = tcycle.data[tcycle.p]; + // post("position %d, increment %f",tcycle.p,increment ); + } else { + increment = 1.0; + //error("increment default, len is zero"); + } + // initial cleaning + for(i=0; i<n; i++){ + outchanL[i] = outchanR[i] = 0.0; + } + flimit = (b_frames - 1) * 2; + for(i = 0; i < overlap_max; i++){ + if(events[i].status == ACTIVE){ + gain = events[i].gain; + + if(b_nchans == 1){ /* mono */ + + flimit = (b_frames - 1); + for(j = 0; j < n; j++){ + if(events[i].countdown > 0){ + --events[i].countdown; + } else { + + iphase = events[i].phasef; + frac = events[i].phasef - iphase; + + if(increment > 0){ + if(iphase == flimit || increment == 1.0){ + outchanL[j] += b_samples[iphase].w_float * gain; + outchanR[j] += b_samples[iphase].w_float * gain; + } else { + samp1 = b_samples[iphase].w_float; + samp2 = b_samples[iphase+1].w_float; + samp1 = gain * (samp1 + frac * (samp2-samp1)); + outchanL[j] += samp1; + outchanR[j] += samp1; + } + } else { /*negative increment case (currently unused but might be useful)*/ + if(iphase == 0.0 || increment == -1.0 ){ + outchanL[j] += b_samples[iphase].w_float * gain; + outchanR[j] += b_samples[iphase].w_float * gain; + } else { + samp2 = b_samples[iphase].w_float; + samp1 = b_samples[iphase-1].w_float; + samp1 = gain * (samp1 + frac * (samp2-samp1)); + outchanL[j] += samp1; + outchanR[j] += samp1; + } + } + events[i].phasef += increment; + + if( events[i].phasef < 0.0 || events[i].phasef >= b_frames){ + events[i].status = INACTIVE; + events[i].phasef = 0; + // post("valid exit mono note"); + break; + } + } + } + } else if(b_nchans == 2){ +/* + + for(j = 0; j < n; j++){ + if(events[i].countdown > 0){ + --events[i].countdown; + } else { + iphase = events[i].phasef; + frac = events[i].phasef - iphase; + iphase *= 2; + if(increment > 0){ + if(iphase == flimit || increment == 1.0){ + outchanL[j] += b_samples[iphase] * gain; + outchanR[j] += b_samples[iphase+1] * gain; + } else { + samp1 = b_samples[iphase]; + samp2 = b_samples[iphase+2]; + outchanL[j] += gain * (samp1 + frac * (samp2-samp1)); + samp1 = b_samples[iphase+1]; + samp2 = b_samples[iphase+3]; + outchanR[j] += gain * (samp1 + frac * (samp2-samp1)); + } + } else { + if(iphase == 0.0 || increment == -1.0 ){ + outchanL[j] += b_samples[iphase] * gain; + outchanR[j] += b_samples[iphase+1] * gain; + } else { + samp2 = b_samples[iphase]; + samp1 = b_samples[iphase-2]; + outchanL[j] += gain * (samp1 + frac * (samp2-samp1)); + samp2 = b_samples[iphase+1]; + samp1 = b_samples[iphase-1]; + outchanR[j] += gain * (samp1 + frac * (samp2-samp1)); + } + } + events[i].phasef += increment; + + if( events[i].phasef < 0.0 || events[i].phasef >= b_frames){ + events[i].status = INACTIVE; + break; + } + } + }*/ + } + } + } + + for(i=0; i<n; i++){ + if(trigger_vec[i]){ + gain = trigger_vec[i]; + + insert_success = 0; + for(j=0; j<overlap_max; j++){ + if(events[j].status == INACTIVE){ + events[j].status = ACTIVE; + events[j].gain = gain; + if(increment > 0){ + events[j].phasef = 0.0; + } else { + events[j].phasef = b_frames - 1; + } + insert_success = 1; + new_insert = j; + break; + } + } + + if(!insert_success){ // steal a note + + maxphase = 0; + theft_candidate = 0; + for(k = 0; k < overlap_max; k++){ + if(events[k].phasef > maxphase){ + maxphase = events[k].phasef; + theft_candidate = k; + } + } + new_insert = theft_candidate; + events[new_insert].gain = gain; + if(increment > 0){ + events[new_insert].phasef = 0.0; + } else { + events[new_insert].phasef = b_frames - 1; + } + insert_success = 1; + post("stealing a note at %d for buffer %s", new_insert, sound_name); + } + events[new_insert].countdown = latency_samples; + events[new_insert].status = ACTIVE; + x->new_slot = new_insert; + x->new_gain = gain; + // post("new note at slot %d",new_insert); + if(tcycle.len > 0){ + increment = tcycle.data[tcycle.p++]; + if(tcycle.p >= tcycle.len){ + tcycle.p = 0; + } + x->tcycle.p = tcycle.p; + } else { + increment = 1.0; + } + + for(k=i; k<n; k++){ + //roll out for remaining portion of vector + if(events[new_insert].countdown > 0){ + --events[new_insert].countdown; + } else { + if(b_nchans == 1){ + + iphase = events[new_insert].phasef; + frac = events[new_insert].phasef - iphase; + if(iphase < 0 || iphase >= b_frames){ + error("aborting on phase %f",events[new_insert].phasef); + break; + } + if(increment > 0){ + if(iphase == flimit || increment == 1.0){ + outchanL[k] += b_samples[iphase].w_float * gain; + outchanR[k] += b_samples[iphase].w_float * gain; + } else { + samp1 = b_samples[iphase].w_float; + samp2 = b_samples[iphase+1].w_float; + samp1 = gain * (samp1 + frac * (samp2-samp1)); + outchanL[k] += samp1; + outchanR[k] += samp1; + } + } else { /*negative increment case (currently unused but might be useful)*/ + if(iphase == 0.0 || increment == -1.0 ){ + outchanL[k] += b_samples[iphase].w_float * gain; + outchanR[k] += b_samples[iphase].w_float * gain; + } else { + samp2 = b_samples[iphase].w_float; + samp1 = b_samples[iphase-2].w_float; + samp1 = gain * (samp1 + frac * (samp2-samp1)); + outchanL[k] += samp1; + outchanR[k] += samp1; + } + } + events[new_insert].phasef += increment; + + if( events[new_insert].phasef < 0.0 || events[new_insert].phasef >= b_frames){ + events[new_insert].status = INACTIVE; + break; + } + } else if(b_nchans == 2) + { /* + iphase = events[new_insert].phasef; + frac = events[new_insert].phasef - iphase; + iphase *= 2; + if(increment > 0){ + if(iphase == flimit || increment == 1.0){ + outchanL[k] += b_samples[iphase] * gain; + outchanR[k] += b_samples[iphase+1] * gain; + } else { + samp1 = b_samples[iphase]; + samp2 = b_samples[iphase+2]; + outchanL[k] += gain * (samp1 + frac * (samp2-samp1)); + samp1 = b_samples[iphase+1]; + samp2 = b_samples[iphase+3]; + outchanR[k] += gain * (samp1 + frac * (samp2-samp1)); + } + } else { + if(iphase == 0.0 || increment == -1.0 ){ + outchanL[k] += b_samples[iphase] * gain; + outchanR[k] += b_samples[iphase+1] * gain; + } else { + samp2 = b_samples[iphase]; + samp1 = b_samples[iphase-2]; + outchanL[k] += gain * (samp1 + frac * (samp2-samp1)); + samp2 = b_samples[iphase+1]; + samp1 = b_samples[iphase-1]; + outchanR[k] += gain * (samp1 + frac * (samp2-samp1)); + } + } + events[new_insert].phasef += increment; + + if( events[new_insert].phasef < 0.0 || events[new_insert].phasef >= b_frames){ + events[new_insert].status = INACTIVE; + break; + } */ + } + } + } + } + } + x->increment = increment; + /* x->tb_inpt = tb_inpt; + x->tb_outpt = tb_outpt;*/ + return(w+6); + /* end of block_dsp contingecy code */ + } + + /* main body of bashfest processing */ + + + for(i=0; i<n; i++){ /* pre-clean buffers*/ + outchanL[i] = outchanR[i] = 0.0; + } + + /* add output from all active buffers into global outlet buffers */ + + + for(i = 0; i < overlap_max; i++){ + if( events[i].status == ACTIVE){ + out_channels = events[i].out_channels; + /* assign the output part of work buffer to the local float buffer */ + + processed_drum = events[i].workbuffer + events[i].in_start; + + for(j = 0; j < n; j++){ + if(x->grab){ + x->grab = 0; + // if too slow, defend with defer_low() + bashfest_copy_to_MSP_buffer(x,i); + } + if(events[i].countdown > 0){ + --events[i].countdown; + } else { + if(out_channels == 1){ + outchanL[j] += processed_drum[events[i].phase] * events[i].gainL; + outchanR[j] += processed_drum[events[i].phase] * events[i].gainR; + } else if(out_channels == 2){ + iphase = events[i].phase * 2; + outchanL[j] += processed_drum[iphase] * events[i].gainL; + outchanR[j] += processed_drum[iphase+1] * events[i].gainR; + } + + events[i].phase++; + + if(events[i].phase >= events[i].sample_frames){ + events[i].status = INACTIVE; + break; + } + } + } + } + } + + /* now check for initiation click. If found, + add to list. If necessary, steal a note + */ + for(i=0; i<n; i++){ + if(trigger_vec[i]){ + gain = trigger_vec[i]; + + /*look for an open slot*/ + insert_success = 0; + for(j=0; j<overlap_max; j++){ + if(events[j].status == INACTIVE){ + events[j].status = ACTIVE; + events[j].gain = gain; + insert_success = 1; + new_insert = j; + break; + } + } + + if(!insert_success){ /* steal a note if necessary*/ + maxphase = 0; + theft_candidate = 0; + for(k = 0; k < overlap_max; k++){ + if(events[k].phase > maxphase){ + maxphase = events[k].phase; + theft_candidate = k; + } + } + if(x->verbose){ + post("stealing note at slot %d", theft_candidate); + } + post("stealing a note at %d for buffer %s", theft_candidate, sound_name); + new_insert = theft_candidate; + events[new_insert].gain = gain; + insert_success = 1; + } + + events[new_insert].countdown = x->latency_samples; + x->new_slot = new_insert; + x->new_gain = gain; + + bashfest_deploy_dsp(x); + + + /* now begin output from the new note */ + + out_channels = events[new_insert].out_channels; + processed_drum = events[new_insert].workbuffer + events[new_insert].in_start; + + /* processed_drum = events[new_insert].workbuffer; */ + for(j = i; j < n; j++){ + if(events[new_insert].countdown > 0){ + --events[new_insert].countdown; + } else{ + iphase = events[new_insert].phase; + if(x->grab){ + x->grab = 0; + // if too slow, defend with defer_low() + bashfest_copy_to_MSP_buffer(x,i); + } + if(out_channels == 1){ + outchanL[j] += processed_drum[iphase] * events[new_insert].gainL; + outchanR[j] += processed_drum[iphase] * events[new_insert].gainR; + } else if(out_channels == 2){ + iphase = events[i].phase * 2; + outchanL[j] += processed_drum[iphase] * events[new_insert].gainL; + outchanR[j] += processed_drum[iphase+1] * events[new_insert].gainR; + } + + events[new_insert].phase++; + + if(events[new_insert].phase >= events[new_insert].sample_frames){ + events[new_insert].status = INACTIVE; + break; + } + } + } + } + } + return (w+6); +} + +void bashfest_copy_to_MSP_buffer(t_bashfest *x, int slot) +{ + int i; //,j; + t_event *events = x->events; + long b_nchans = x->b_nchans; + long b_frames = x->b_frames; + t_word *b_samples = x->b_samples; + float *processed_drum; + + processed_drum = events[slot].workbuffer + events[slot].in_start; + + if(events[slot].out_channels == b_nchans){ + if(b_nchans == 1){ + for(i=0;i<b_frames;i++){ + b_samples[i].w_float = processed_drum[i]; + } + } else if(b_nchans == 2){ + /*for(i=0;i<b_frames*2;i+=2){ + b_samples[i].w_float = processed_drum[i]; + b_samples[i+1] = processed_drum[i+1]; + }*/ + }else{ + error("bashfest copy: channel mismatch"); + //fixable but first let's try these + } + } +} +void bashfest_deploy_dsp(t_bashfest *x) +{ + float *b_samples = x->b_samples; + long b_nchans = x->b_nchans; + long b_frames = x->b_frames; + t_event *events = x->events; + float pan; + int i; //,j; + float *params = x->params; + int pcount; + int buf_samps = x->buf_samps; + int curarg = 0; + float maxamp; + float rescale; + float *inbuf; + int slot = x->new_slot; + float gain = x->new_gain; + + events[slot].completed = 1;// for testing only + + if(b_nchans <1 || b_nchans > 2){ + error("illegal channels in buffer:%d",b_nchans); + return; + x->hosed = 1; + } + if(b_frames > x->buf_frames / 2){ + error("sample in buffer %s is to large for work buffer",x->sound_name); + return; + x->hosed = 1; + } + + pan = boundrand(0.1, 0.9); + events[slot].gainL = cos(PIOVERTWO * pan) * gain; + events[slot].gainR = sin(PIOVERTWO * pan) * gain; + events[slot].phase = 0; + events[slot].status = ACTIVE; + /* if(x->verbose) + post("initiating note at slot %d, gain %f, pan %f,inchans %d",slot,gain,pan,b_nchans); + */ + if(x->sound_lock){ + return;// of course should finally copy good stuff to MSP buffer + } + events[slot].out_channels = b_nchans; + events[slot].sample_frames = b_frames; + for(i=0; i<b_frames*b_nchans; i++){ + events[slot].workbuffer[i] = b_samples[i]; + } + + // clean rest of work buffer + for(i=b_frames*b_nchans; i<buf_samps; i++){ + events[slot].workbuffer[i] = 0.0; + } + events[slot].in_start = 0; + events[slot].out_start = x->halfbuffer; + pcount = bashfest_set_parameters(x, params); + + while(curarg < pcount){ + if(params[curarg] == TRANSPOSE){ + transpose(x, slot, &curarg); + } + else if(params[curarg] == RINGMOD){ + ringmod(x, slot, &curarg); + } + else if(params[curarg] == RETRO){ + retrograde(x, slot, &curarg); + } + else if(params[curarg] == COMB){ + comber(x, slot, &curarg); + } + else if(params[curarg] == FLANGE){ + flange(x, slot, &curarg); + } + else if(params[curarg] == BUTTER){ + butterme(x, slot, &curarg); + } + else if(params[curarg] == TRUNCATE){ + truncateme(x, slot, &curarg); + } + else if(params[curarg] == SWEEPRESON){ + sweepreson(x, slot, &curarg); + } + else if(params[curarg] == SLIDECOMB){ + slidecomb(x, slot, &curarg); + } + else if(params[curarg] == REVERB1){ + reverb1(x, slot, &curarg); + } + else if(params[curarg] == ELLIPSE){ + ellipseme(x, slot, &curarg); + } + else if(params[curarg] == FEED1){ + feed1me(x, slot, &curarg); + } + else if(params[curarg] == FLAM1){ + flam1(x, slot, &curarg); + } + else if(params[curarg] == FLAM2){ + flam2(x, slot, &curarg); + } + else if(params[curarg] == EXPFLAM){ + expflam(x, slot, &curarg); + } + else if(params[curarg] == COMB4){ + comb4(x, slot, &curarg); + } + else if(params[curarg] == COMPDIST){ + compdist(x, slot, &curarg); + } + else if(params[curarg] == RINGFEED){ + ringfeed(x, slot, &curarg); + } + else if(params[curarg] == RESONADSR){ + resonadsr(x, slot, &curarg); + } + else if(params[curarg] == STV){ + stv(x, slot, &curarg); + } + else { + error("deploy missing branch"); + } + } + + maxamp = 0.0; + inbuf = events[slot].workbuffer + events[slot].in_start; + b_nchans = events[slot].out_channels; + b_frames = events[slot].sample_frames; + for(i=0; i< b_frames * b_nchans; i++){ + if(maxamp < fabs(inbuf[i])){ + maxamp = fabs(inbuf[i]); + } + } + if(maxamp>0){ + rescale = 1.0/maxamp; + for(i=0; i< b_frames * b_nchans; i++){ + inbuf[i] *= rescale; + } + } + else{ + if(x->verbose) + error("zero maxamp detected"); + } + + if(events[slot].countdown <= 0) + error("deploy_dsp: failed to conclude in time; need more latency"); +} + +int bashfest_set_parameters(t_bashfest *x,float *params) +{ + float rval; + int pcount = 0; + int events; + int i, j; + int type; + float cf;//, bw; + float *odds = x->odds; + int maxproc = x->max_process_per_note; + int minproc = x->min_process_per_note; + float tval; + t_cycle tcycle = x->tcycle; + + /* preliminary transposition will be set here */ + + if(tcycle.len > 0){ + params[pcount++] = TRANSPOSE; + params[pcount++] = tcycle.data[tcycle.p++]; + if(tcycle.p >= tcycle.len){ + tcycle.p = 0; + } + x->tcycle.p = tcycle.p; + } + + + if(maxproc <= 0){ + return pcount; + } + + events = minproc + rand() % (1+(maxproc-minproc)); + + for(i = 0; i < events; i++){ + rval = boundrand(0.0,1.0); + j = 0; + while(rval > odds[j]){ + j++; + } + + + if(j == RETRO){ + params[pcount++] = RETRO; + } + else if(j == COMB){ + params[pcount++] = COMB; + params[pcount++] = boundrand(.001,.035);// delaytime + params[pcount++] = boundrand(.25,.98);//feedback + params[pcount++] = boundrand(.05,.5);//hangtime + } + else if(j == RINGMOD) { + params[pcount++] = RINGMOD; + params[pcount++] = boundrand(100.0,2000.0); //need a log version + } + else if(j == TRANSPOSE){ + params[pcount++] = TRANSPOSE; + params[pcount++] = boundrand(0.25,3.0); + } + else if(j == FLANGE){ + params[pcount++] = FLANGE; + params[pcount++] = boundrand(100.0,400.0); + params[pcount++] = boundrand(600.0,4000.0); + params[pcount++] = boundrand(0.1,2.0); + params[pcount++] = boundrand(0.1,0.95); + params[pcount++] = boundrand(0.0,0.9); + } + else if(j == BUTTER){ + params[pcount++] = BUTTER; + type = rand() % 3; + params[pcount++] = type; + cf = boundrand(70.0,3000.0); + params[pcount++] = cf; + if(type == BANDPASS){ + params[pcount++] = cf * boundrand(0.05,0.6); + } + } + else if(j == TRUNCATE){ + params[pcount++] = TRUNCATE; + params[pcount++] = boundrand(.05,.15); + params[pcount++] = boundrand(.01,.05); + } + else if(j == SWEEPRESON){ + params[pcount++] = SWEEPRESON; + params[pcount++] = boundrand(100.0,300.0); + params[pcount++] = boundrand(600.0,6000.0); + params[pcount++] = boundrand(0.01,0.2); + params[pcount++] = boundrand(0.05,2.0); + params[pcount++] = boundrand(0.0,1.0); + } + else if(j == SLIDECOMB){ + params[pcount++] = SLIDECOMB; + params[pcount++] = boundrand(.001,.03); + params[pcount++] = boundrand(.001,.03); + params[pcount++] = boundrand(0.05,0.95); + params[pcount++] = boundrand(0.05,0.5); + } + else if(j == REVERB1){ + params[pcount++] = REVERB1; + params[pcount++] = boundrand(0.25,0.99); + params[pcount++] = boundrand(0.1,1.0); + params[pcount++] = boundrand(0.2,0.8); + } + else if(j == ELLIPSE){ + params[pcount++] = ELLIPSE; + params[pcount++] = rand() % ELLIPSE_FILTER_COUNT; + } + else if(j == FEED1){ + params[pcount++] = FEED1; + tval = boundrand(.001,0.1); + params[pcount++] = tval; + params[pcount++] = boundrand(tval,0.1); + tval = boundrand(.01,0.5); + params[pcount++] = tval; + params[pcount++] = boundrand(tval,0.5); + params[pcount++] = boundrand(.05,1.0); + } + else if(j == FLAM1){ + params[pcount++] = FLAM1; + params[pcount++] = 4 + (rand() % 20); + params[pcount++] = boundrand(0.3,0.8); + params[pcount++] = boundrand(0.5,1.2); + params[pcount++] = boundrand(.025,0.15); + } + else if(j == FLAM2){ + params[pcount++] = FLAM2; + params[pcount++] = 4 + (rand() % 20); + params[pcount++] = boundrand(0.1,0.9); + params[pcount++] = boundrand(0.2,1.2); + params[pcount++] = boundrand(.025,0.15); + params[pcount++] = boundrand(.025,0.15); + } + else if(j == EXPFLAM){ + params[pcount++] = EXPFLAM; + params[pcount++] = 4 + (rand() % 20); + params[pcount++] = boundrand(0.1,0.9); + params[pcount++] = boundrand(0.2,1.2); + params[pcount++] = boundrand(.025,0.15); + params[pcount++] = boundrand(.025,0.15); + params[pcount++] = boundrand(-5.0,5.0); + } + else if(j == COMB4){ + params[pcount++] = COMB4; + params[pcount++] = boundrand(100.0,900.0); + params[pcount++] = boundrand(100.0,900.0); + params[pcount++] = boundrand(100.0,900.0); + params[pcount++] = boundrand(100.0,900.0); + tval = boundrand(.5,0.99); + params[pcount++] = tval; + params[pcount++] = tval; + } + else if(j == COMPDIST){ + params[pcount++] = COMPDIST; + params[pcount++] = tval = boundrand(.01,.25); + params[pcount++] = boundrand(tval,.9); + params[pcount++] = 1; + } + else if(j == RINGFEED){ + params[pcount++] = RINGFEED; + params[pcount++] = boundrand(90.0,1500.0); + params[pcount++] = boundrand(90.0,1500.0); + params[pcount++] = boundrand(0.2,0.95); + params[pcount++] = boundrand(90.0,1500.0); + params[pcount++] = boundrand(.01,.4); + params[pcount++] = boundrand(.05,1.0); + } + else if(j == RESONADSR){ + params[pcount++] = RESONADSR; + params[pcount++] = boundrand(.01,.1); + params[pcount++] = boundrand(.01,.05); + params[pcount++] = boundrand(.05,.5); + params[pcount++] = boundrand(150.0,4000.0); + params[pcount++] = boundrand(150.0,4000.0); + params[pcount++] = boundrand(150.0,4000.0); + params[pcount++] = boundrand(150.0,4000.0); + params[pcount++] = boundrand(.03,.7); + } + else if(j == STV){ + params[pcount++] = STV; + params[pcount++] = boundrand(.025,0.5); + params[pcount++] = boundrand(.025,0.5); + params[pcount++] = boundrand(.001,.01); + } + else { + error("could not find a process for %d",j); + return 0; + } + } + return pcount; +} + +void bashfest_dsp_free(t_bashfest *x) +{ + int i; + + t_freebytes(x->sinewave, x->sinelen * sizeof(float)); + t_freebytes(x->params, MAX_PARAMETERS * sizeof(float)); + t_freebytes(x->odds, 64 * sizeof(float)); + t_freebytes(x->delayline1, x->maxdelay * x->sr * sizeof(float)); + t_freebytes(x->delayline2, x->maxdelay * x->sr * sizeof(float)); + + for(i=0;i<x->overlap_max;i++){ + t_freebytes(x->events[i].workbuffer, x->buf_samps * sizeof(float)); + } + t_freebytes(x->events, x->overlap_max * sizeof(t_event)); + + t_freebytes(x->eel,MAXSECTS * sizeof(LSTRUCT)); + for( i = 0; i < 4 ; i++ ){ + t_freebytes(x->mini_delay[i], ((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float)); + } + t_freebytes(x->reverb_ellipse_data, 16 * sizeof(float)); + for(i=0;i<MAXFILTER;i++){ + t_freebytes(x->ellipse_data[i], MAX_COEF * sizeof(float)); + } + t_freebytes(x->ellipse_data, MAXFILTER * sizeof(float *)); + t_freebytes(x->transfer_function,x->tf_len * sizeof(float)); + t_freebytes(x->feedfunc1, x->feedfunclen * sizeof(float)); + t_freebytes(x->feedfunc2, x->feedfunclen * sizeof(float)); + t_freebytes(x->feedfunc3, x->feedfunclen * sizeof(float)); + t_freebytes(x->feedfunc4, x->feedfunclen * sizeof(float)); + t_freebytes(x->flamfunc1, x->flamfunc1len * sizeof(float)); + for( i = 0; i < 4; i++ ){ + t_freebytes(x->combies[i].arr, x->combies[i].len * sizeof(float)); + } + t_freebytes(x->combies,4 * sizeof(CMIXCOMB)); + t_freebytes(x->adsr->func, x->adsr->len * sizeof(float)); + t_freebytes(x->adsr,sizeof(CMIXADSR)); + t_freebytes(x->tcycle.data,CYCLE_MAX * sizeof(float)); + t_freebytes(x->trigger_vec, MAX_VEC * sizeof(float)); +} + +void bashfest_dsp(t_bashfest *x, t_signal **sp) +{ + bashfest_setbuf(x, x->wavename); + + if( x->hosed ){ + error("bashfest~ needs a valid buffer"); + } + /* if vector size changes, we also need to deal, thanks to + the trigger buffer inter-delay + */ + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + if(!x->sr){ + post("warning: zero sampling rate!"); + x->sr = 44100; + } + } + if(x->b_frames <= 0){ + post("empty buffer, hosing down"); + x->hosed = 1; + } + + if(x->hosed){ + dsp_add(bashfest_perform_hosed, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } else { + dsp_add(bashfest_perform, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } +} +/* +void bashfest_assist (t_bashfest *x, void *b, long msg, long arg, char *dst) +{ + if (msg==1) { + switch (arg) { + case 0: sprintf(dst,"(signal) Click Trigger"); break; + } + } + else if (msg==2) { + switch(arg){ + case 0: sprintf(dst,"(signal) Channel 1 Output"); break; + case 1: sprintf(dst,"(signal) Channel 2 Output"); break; + } + } +} +*/ + + diff --git a/externals/lyonpotpourri/bloscbank.c b/externals/lyonpotpourri/bloscbank.c new file mode 100755 index 000000000..c35ab0dee --- /dev/null +++ b/externals/lyonpotpourri/bloscbank.c @@ -0,0 +1 @@ + #include "fftease.h" void bloscbank( float *S, float *O, int D, float iD, float *lf, float *la, float *index, float *tab, int len, float synt, int lo, int hi ) { int amp,freq,chan, i; float a,ainc,f,finc,address; for ( chan = lo; chan < hi; chan++ ) { freq = ( amp = ( chan << 1 ) ) + 1; if ( S[amp] > synt ){ finc = ( S[freq] - ( f = lf[chan] ) )* iD; ainc = ( S[amp] - ( a = la[chan] ) )* iD; address = index[chan]; for ( i = 0; i < D ; i++ ) { O[i] += a*tab[ (int) address ]; address += f; while ( address >= len ) address -= len; while ( address < 0 ) address += len; a += ainc; f += finc; } lf[chan] = S[freq]; la[chan] = S[amp]; index[chan] = address; } } } \ No newline at end of file diff --git a/externals/lyonpotpourri/buffet~-help.pd b/externals/lyonpotpourri/buffet~-help.pd new file mode 100755 index 000000000..16c521ce8 --- /dev/null +++ b/externals/lyonpotpourri/buffet~-help.pd @@ -0,0 +1,201 @@ +#N canvas 586 296 617 462 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dopey 62079 float 2; +#X coords 0 1 62079 -1 200 140 1; +#X restore 34 65 graph; +#N canvas 742 412 538 388 load-samples 0; +#X obj 36 151 soundfiler; +#X msg 36 83 bang; +#X obj 36 109 openpanel; +#X obj 144 37 loadbang; +#X msg 36 131 read -resize \$1 dopey; +#X obj 117 17 inlet; +#X msg 117 64 read -resize sound/voice.wav dopey; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 6 0; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X restore 245 110 pd load-samples; +#X obj 222 241 buffet~ dopey 100 300; +#X obj 222 288 bng 15 100 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 365 270 5 0 0 0 - - -, f 5; +#N canvas 0 22 450 300 (subpatch) 0; +#X array soapy 22050 float 2; +#X coords 0 1 22050 -1 100 70 1; +#X restore 34 234 graph; +#N canvas 171 294 544 498 processing 0; +#X obj 44 402 s buffet-msgs; +#X msg 203 208 reverse; +#X msg 171 150 normalize 0.95; +#X msg 173 176 killdc; +#X text 43 34 Destructive Buffer Edits; +#X msg 182 386 autoredraw \$1; +#X obj 182 364 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X text 199 363 turn off if redraw hurts performance; +#X msg 182 345 1; +#X obj 182 329 loadbang; +#X msg 43 67 fadein 100; +#X msg 89 92 fadeout 500; +#X msg 112 121 rotatetozero 300; +#X msg 221 247 erase 300 460; +#X msg 223 285 internal_fadeout 500 800; +#X msg 251 309 internal_fadein 200 500; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 8 0 6 0; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X coords 0 0 1 1 85 60 0; +#X restore 33 341 pd processing; +#X obj 222 214 r buffet-msgs; +#N canvas 574 418 474 306 copying 0; +#X obj 48 70 buffet~ soapy 100 200; +#X text 46 30 clear receiver (optional); +#X obj 50 236 s buffet-msgs; +#X text 156 162 too long requests are truncated; +#X msg 270 53 normalize 1; +#X msg 47 50 erase 0 500; +#X msg 49 112 copy_to_buffer soapy 0 500; +#X msg 62 135 copy_to_buffer soapy 500 1000; +#X msg 154 181 copy_to_buffer soapy 300 1200; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 2 0; +#X connect 7 0 2 0; +#X connect 8 0 2 0; +#X restore 34 314 pd copying; +#X text 229 301 operation completion indicator; +#X text 412 269 rms report; +#N canvas 151 375 470 320 analysis 0; +#X obj 65 188 s buffet-msgs; +#X text 66 88 get rms reading from a specified segment of buffer; +#X msg 120 145 pevents 50 0.05; +#X text 117 130 look for percussive events; +#X msg 64 112 rmschunk 200 300; +#X connect 2 0 0 0; +#X connect 4 0 0 0; +#X restore 33 393 pd analysis; +#X obj 294 344 print; +#X text 334 347 list of estimated onsets in buffer; +#X obj 391 204 dac~; +#X floatatom 416 151 5 0 1 0 - - -, f 5; +#X obj 391 178 *~ 0; +#X obj 419 138 hsl 32 8 0 1 0 0 empty empty empty -2 -8 0 10 -261197 +-1 -1 0 1; +#X text 458 150 playback gain; +#X obj 391 118 player~ dopey 1; +#X msg 245 78 bang; +#X text 282 80 reload; +#X text 29 420 buffet~ - Various operations on contents of an array +; +#N canvas 34 269 705 565 scrambler 0; +#X obj 57 356 s buffet-msgs; +#X msg 57 153 minswap \$1; +#X floatatom 57 123 5 0 0 0 - - -, f 5; +#X floatatom 147 121 5 0 0 0 - - -, f 5; +#X msg 146 151 maxswap \$1; +#X floatatom 144 223 5 0 0 0 - - -, f 5; +#X msg 143 253 overlap \$1; +#X msg 145 194 30; +#X msg 224 256 retroblock; +#X msg 314 276 swap; +#X msg 172 335 specswap 0 1000 250; +#X obj 59 57 t b b b; +#X obj 58 28 loadbang; +#X text 187 120 minimum and maximum swap times in ms.; +#X text 155 209 fade time for tapering swap blocks (20 ms. by default) +; +#X text 226 240 reverse a piece of the buffer; +#X text 354 276 swap two pieces of the buffer; +#X text 177 357 specify which parts of buffer to exchange. arguments +are skip1 \, skip2 and duration. In this example the first 250 ms block +of the buffer is swapped with the 250 ms block beginning 1000 ms into +the buffer.; +#X text 165 26 Destructive rearrangement of buffer; +#X msg 200 479 autoredraw \$1; +#X obj 200 453 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X text 217 452 turn off if redraw hurts performance; +#X msg 200 434 1; +#X obj 200 418 loadbang; +#X obj 316 141 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 315 164 metro 250; +#X msg 58 94 100; +#X msg 148 92 200; +#X obj 237 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 236 181 metro 500; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 7 0 5 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 26 0; +#X connect 11 1 27 0; +#X connect 11 2 7 0; +#X connect 12 0 11 0; +#X connect 19 0 0 0; +#X connect 20 0 19 0; +#X connect 22 0 20 0; +#X connect 23 0 22 0; +#X connect 24 0 25 0; +#X connect 25 0 9 0; +#X connect 26 0 2 0; +#X connect 27 0 3 0; +#X connect 28 0 29 0; +#X connect 29 0 8 0; +#X restore 33 367 pd scrambler; +#N canvas 0 22 470 320 playback-controls 0; +#X obj 18 59 impulse~; +#X msg 19 31 bang; +#X text 57 31 retrigger; +#X msg 95 54 pause; +#X msg 144 55 resume; +#X msg 204 56 stop; +#X obj 18 129 outlet~; +#X obj 203 130 outlet; +#X msg 238 103 static_increment 1; +#X obj 238 84 loadbang; +#X obj 18 89 samm~ 40 1; +#X connect 0 0 10 0; +#X connect 1 0 0 0; +#X connect 3 0 10 0; +#X connect 4 0 10 0; +#X connect 5 0 7 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 6 0; +#X restore 391 74 pd playback-controls; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X connect 2 0 3 0; +#X connect 2 1 12 0; +#X connect 2 2 4 0; +#X connect 7 0 2 0; +#X connect 15 0 16 1; +#X connect 16 0 14 0; +#X connect 16 0 14 1; +#X connect 17 0 15 0; +#X connect 19 0 16 0; +#X connect 20 0 1 0; +#X connect 24 0 19 0; +#X connect 24 0 19 1; +#X connect 24 1 19 0; diff --git a/externals/lyonpotpourri/buffet~.c b/externals/lyonpotpourri/buffet~.c new file mode 100755 index 000000000..f85240ae8 --- /dev/null +++ b/externals/lyonpotpourri/buffet~.c @@ -0,0 +1,2161 @@ +#include "MSPd.h" +#include "fftease.h" + +// adapted for Pd + +#define CUSHION_FRAMES (128) // pad for grabbing +#define MAX_CHANNELS (2) + +#define MAX_RMS_BUFFER (0.250) +#define MIN_RMS_BUFFER (.001) +#define MAX_EVENTS (1024) +#define MAX_RMS_FRAMES (32768) + +#define OBJECT_NAME "buffet~" + + +static t_class *buffet_class; + + +typedef struct { + t_word *b_samples; + int b_valid; + int b_nchans; + int b_frames; +} t_guffer; // stuff we care about from garrays and buffers + +typedef struct _buffet +{ + + t_object x_obj; + float x_f; + t_symbol *wavename; // name of waveform buffer + t_guffer *wavebuf; // holds waveform samples + t_guffer *destbuf; // for copying to another buffer + + float sr; // sampling rate + short hosed; // buffers are bad + float minframes; // minimum replacement block in sample frames + float maxframes; // maximum replacement block in sample frames + long storage_maxframes; // maxframe limit that current memory can handle + float *storage; //temporary memory to store replacement block (set to maxframes * channels) + long storage_bytes; // amount of currently allocated memory + float fade; // fadein/fadeout time in sample frames + float sync; // input from groove sync signal + long swapframes; // number of frames in swap block + long r1startframe; //start frame for block 1 + long r2startframe; // start frame for block 2 + float dc_coef; // filter coefficient + float dc_gain; // normalization factor + short initialized; // first time or not + float *rmsbuf;// for onset analysis + float rmschunk; // store lowest rms value in buffer + void *list; // for start/end list + void *bang; // completion bang + void *floater; // outputs noise floor + t_atom *listdata;// to report est. start/stop times of events in buffer + float *analbuf; // contain overall envelope + float *onset; // contain attack times for percussive evaluations + short autoredraw; // to kill redraw if it impacts performance +} t_buffet; + +void buffet_setbuf(t_buffet *x, t_symbol *wavename); +void *buffet_new(t_symbol *msg, short argc, t_atom *argv); +t_int *buffet_perform(t_int *w); +void buffet_dsp(t_buffet *x, t_signal **sp); +float buffet_boundrand(float min, float max); +void buffet_assist (t_buffet *x, void *b, long msg, long arg, char *dst); +void buffet_dsp_free(t_buffet *x); +void buffet_swap(t_buffet *x); +void buffet_specswap(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_retroblock(t_buffet *x); +void buffet_nakedswap(t_buffet *x); +void buffet_overlap(t_buffet *x, t_floatarg f); +void buffet_minswap(t_buffet *x, t_floatarg f); +void buffet_maxswap(t_buffet *x, t_floatarg f); +void buffet_nosync_setswap(t_buffet *x); +void buffet_info(t_buffet *x); +void buffet_killdc(t_buffet *x); +void buffet_rmschunk(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_fadein(t_buffet *x, t_floatarg f); +void buffet_fadeout(t_buffet *x, t_floatarg f); +void buffet_internal_fadein(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_internal_fadeout(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_dc_gain(t_buffet *x, t_floatarg f); +void buffet_dc_coef(t_buffet *x, t_floatarg f); +void buffet_normalize(t_buffet *x, t_floatarg f); +void buffet_rotatetozero(t_buffet *x, t_floatarg f); +void buffet_autoredraw(t_buffet *x, t_floatarg f); +void buffet_erase(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_events(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_pevents(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_detect_onsets(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_detect_subband_onsets(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +void buffet_copy_to_buffer(t_buffet *x, t_symbol *msg, short argc, t_atom *argv); +int buffet_setdestbuf(t_buffet *x, t_symbol *wavename); +void buffet_init(t_buffet *x, short initialized); +void buffet_reverse(t_buffet *x); +void buffet_redraw(t_buffet *x); +void buffet_redraw_named(t_buffet *x, t_symbol *arrayname); +void buffet_update(t_buffet *x); + + +void buffet_tilde_setup(void) +{ + + buffet_class = class_new(gensym("buffet~"),(t_newmethod)buffet_new,(t_method)buffet_dsp_free, sizeof(t_buffet), + 0, A_GIMME,0); + CLASS_MAINSIGNALIN(buffet_class,t_buffet, x_f ); + + + class_addmethod(buffet_class,(t_method)buffet_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(buffet_class,(t_method)buffet_swap,gensym("swap"),0); + class_addmethod(buffet_class,(t_method)buffet_specswap,gensym("specswap"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_events,gensym("events"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_pevents,gensym("pevents"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_detect_onsets,gensym("detect_onsets"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_detect_subband_onsets,gensym("detect_subband_onsets"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_retroblock,gensym("retroblock"),0); + class_addmethod(buffet_class,(t_method)buffet_minswap,gensym("minswap"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_maxswap,gensym("maxswap"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_fadein,gensym("fadein"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_fadeout,gensym("fadeout"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_overlap,gensym("overlap"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_dc_gain,gensym("dc_gain"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_dc_coef,gensym("dc_coef"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_normalize,gensym("normalize"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_rotatetozero,gensym("rotatetozero"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_autoredraw,gensym("autoredraw"),A_FLOAT,0); + class_addmethod(buffet_class,(t_method)buffet_killdc,gensym("killdc"),0); + class_addmethod(buffet_class,(t_method)buffet_nakedswap,gensym("nakedswap"),0); + class_addmethod(buffet_class,(t_method)buffet_rmschunk,gensym("rmschunk"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_erase,gensym("erase"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_copy_to_buffer,gensym("copy_to_buffer"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_internal_fadein,gensym("internal_fadein"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_internal_fadeout,gensym("internal_fadeout"),A_GIMME,0); + class_addmethod(buffet_class,(t_method)buffet_setbuf,gensym("setbuf"),A_SYMBOL,0); + class_addmethod(buffet_class,(t_method)buffet_reverse,gensym("reverse"),0); + class_addmethod(buffet_class,(t_method)buffet_info,gensym("info"),0); + potpourri_announce(OBJECT_NAME); +} + + + +void buffet_info(t_buffet *x) +{ + long totalframes; + buffet_setbuf(x, x->wavename); + + if( x->hosed ){ + error("buffet~ needs a valid buffer"); + return; + } + + if( ! x->sr){ + error("zero sample rate!"); + return; + } + totalframes = x->wavebuf->b_frames; + post("minswap: %f, maxswap: %f", 1000. * x->minframes / x->sr, 1000. * x->maxframes / x->sr); + post("buffer size: %f", 1000. * totalframes / x->sr); +} + +void buffet_overlap(t_buffet *x, t_floatarg f) +{ + if( f < 0.01 ){ + error("minimum fade time is 0.01 milliseconds"); + return; + } + x->fade = f * .001 * x->sr; +} + +void buffet_events(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_word *b_samples; + int b_nchans; + int b_frames; + t_atom *listdata = x->listdata; + + float bufsize; + float onthresh; + float offthresh; + long bufsamps; + long aframes; // frames to analyze + float tadv; + + long i,j; + float meansq; + float rmsval; + long bindex; + float ipos; + short activated = 0; + float realtime = 0.0; + int event_count = 0; + float buffer_duration; + + buffet_setbuf(x, x->wavename); + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + // duration in ms. + buffer_duration = 1000.0 * (float)b_frames / x->sr; + + bufsize = .001 * atom_getfloatarg(0,argc,argv); + if(bufsize > MAX_RMS_BUFFER){ + bufsize = MAX_RMS_BUFFER; + post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MAX_RMS_BUFFER * 1000.0); + } else if(bufsize < MIN_RMS_BUFFER){ + bufsize = MIN_RMS_BUFFER; + post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MIN_RMS_BUFFER * 1000.0); + } + + onthresh = atom_getfloatarg(1,argc,argv); + offthresh = atom_getfloatarg(2,argc,argv); + bufsamps = x->sr * bufsize; + + bufsamps = bufsize * x->sr; + tadv = (float)bufsamps / x->sr; + // post("actual window size: %f",tadv); + aframes = (long) ( (float) b_frames / (float)bufsamps ) - 1; + if(aframes < 2){ + error("%s: this buffer is too short to analyze",OBJECT_NAME); + return; + } + // post("analyzing %d frames",aframes); + for(i = 0; i < aframes; i++){ + meansq = 0.0; + ipos = b_nchans * i * bufsamps; + /* only analyze first channel */ + for(j = 0; j < bufsamps; j+= b_nchans){ + bindex = ipos + j; + meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; + } + meansq /= (float) bufsamps; + rmsval = sqrt(meansq); + realtime += tadv; + if(rmsval > onthresh && ! activated) { + activated = 1; + + // post("event %d starts at %f",event_count+1, realtime); + + if(event_count >= MAX_EVENTS){ + error("%s: exceeded maximum of %d events",OBJECT_NAME, MAX_EVENTS); + break; + } + SETFLOAT(listdata+(event_count*2), realtime * 1000.0); + + } + else if( rmsval < offthresh && activated ){ + activated = 0; + // post("event %d ends at %f",event_count, realtime); + SETFLOAT(listdata+((event_count*2) + 1), realtime * 1000.0); + ++event_count; + } + } + if(activated){ + post("%s: missed the end of the last event; setting to end of buffer",OBJECT_NAME); + SETFLOAT(listdata+((event_count*2) + 1), buffer_duration); + ++event_count; + } + outlet_list(x->list, 0, event_count * 2, listdata); +} + + +void buffet_pevents(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_word *b_samples; + int b_nchans; + int b_frames; + t_atom *listdata = x->listdata; + + float bufsize; + //float onthresh; + //float offthresh; + float diffthresh; + long bufsamps; + long aframes; // frames to analyze + float tadv; + //long current_frame = 0; + long i,j; + float meansq; + float rmsval; + long bindex; + float ipos; + //short activated = 0; + float realtime = 0.0; + int event_count = 0; + float buffer_duration; + float mindiff, maxdiff, absdiff,rmsdiff; + float *analbuf = x->analbuf; + float *onset = x->onset; + //float endtime; + + buffet_setbuf(x, x->wavename); + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + // duration in ms. + buffer_duration = 1000.0 * (float)b_frames / x->sr; + + bufsize = .001 * atom_getfloatarg(0,argc,argv); + if(bufsize > MAX_RMS_BUFFER){ + bufsize = MAX_RMS_BUFFER; + post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MAX_RMS_BUFFER * 1000.0); + } else if(bufsize < MIN_RMS_BUFFER){ + bufsize = MIN_RMS_BUFFER; + post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MIN_RMS_BUFFER * 1000.0); + } + + diffthresh = atom_getfloatarg(1,argc,argv); + bufsamps = x->sr * bufsize; + + bufsamps = bufsize * x->sr; + tadv = (float)bufsamps / x->sr; + + aframes = (long) ( (float) b_frames / (float)bufsamps ); + if(aframes < 2){ + error("%s: this buffer is too short to analyze",OBJECT_NAME); + return; + } + if(aframes > MAX_RMS_FRAMES){ + post("too many frames: try a larger buffer size"); + return; + } + analbuf[0] = 0; // for first comparison + for(i = 1; i < aframes; i++){ + meansq = 0.0; + ipos = b_nchans * i * bufsamps; + /* only analyze first channel */ + for(j = 0; j < bufsamps; j+= b_nchans){ + bindex = ipos + j; + meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; + } + meansq /= (float) bufsamps; + analbuf[i] = rmsval = sqrt(meansq); + realtime += tadv; + + } + + realtime = 0; + mindiff = 9999.; + maxdiff = 0.0; + /* LPF - use elsewhere? + for(i = 1; i < aframes; i++ ){ + analbuf[i] = (analbuf[i] + analbuf[i-1]) * 0.5; + } + */ + // look for big changes in direction + for(i = 1; i < aframes; i++ ){ + rmsdiff = analbuf[i] - analbuf[i-1]; + absdiff = fabs(rmsdiff); + if(absdiff > maxdiff) + maxdiff = absdiff; + if(absdiff < mindiff) + mindiff = absdiff; + + if( rmsdiff > diffthresh ){ + // new + + onset[event_count] = (realtime + bufsize) * 1000.0; + if(onset[event_count] < 0) + onset[event_count] = 0; + ++event_count; + // post("rt %f diff %f",realtime * 1000.0,rmsdiff); + } + realtime += tadv; + } + // post("mindiff %f maxdiff %f",mindiff,maxdiff); + if(event_count == 0){ + post("%s: no events found",OBJECT_NAME); + } + + + for(i = 0; i < event_count; i++){ + SETFLOAT(listdata + i, onset[i]); + } + outlet_list(x->list, 0, event_count, listdata); +} + +void buffet_internal_fadeout(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + long fadeframes; + long totalframes; + int i,j,k; + float env; + t_word *b_samples; + long b_nchans; + long startframe; + long endframe; + + if( ! x->sr){ + error("zero sample rate!"); + return; + } + + + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(argc < 2){ + post("%s: internal_fadeout requires start and end times",OBJECT_NAME); + return; + } + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + + if(startframe < 0 || endframe > totalframes || endframe <= startframe){ + error("%s: bad frame boundaries to internal_fadeout: %ld and %ld",OBJECT_NAME,startframe, endframe); + return; + } + fadeframes = endframe - startframe; + + for(i = (endframe-1) * b_nchans , k = 0; k < fadeframes ; i -= b_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_nchans; j++){ + b_samples[i + j].w_float *= env; + } + } + buffet_update(x); +} + +void buffet_internal_fadein(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + long fadeframes; + long totalframes; + int i,j,k; + float env; + t_word *b_samples; + long b_nchans; + long startframe; + long endframe; + + if( ! x->sr){ + error("zero sample rate!"); + return; + } + + + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(argc < 2){ + post("%s: internal_fadeout requires start and end times",OBJECT_NAME); + return; + } + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + + if(startframe < 0 || endframe > totalframes || endframe <= startframe){ + error("%s: bad frame boundaries to internal_fadein: %ld and %ld",OBJECT_NAME,startframe, endframe); + return; + } + fadeframes = endframe - startframe; + + for(i = startframe * b_nchans , k = 0; k < fadeframes ; i += b_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_nchans; j++){ + b_samples[i + j].w_float *= env; + } + } + buffet_update(x); +} + +void buffet_reverse(t_buffet *x) +{ + + int i,j; + // float env; + t_word *b_samples; + long b_nchans; + long b_frames; + float tmpsamp; + long lenm1; + + buffet_setbuf(x, x->wavename); + if(!x->wavebuf->b_valid){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + lenm1 = (b_frames - 1) * b_nchans; + for( i = 0; i < (b_frames * b_nchans) / 2; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + tmpsamp = b_samples[(lenm1 - i) + j].w_float; + b_samples[(lenm1 - i) + j].w_float = b_samples[i + j].w_float; + b_samples[i + j].w_float = tmpsamp; + } + } + + buffet_update(x); +} + +void buffet_update(t_buffet *x) +{ + outlet_bang(x->bang); + if(x->autoredraw){ + buffet_redraw(x); + } +} + + +void buffet_redraw_named(t_buffet *x, t_symbol *arrayname) +{ + t_garray *a; + if (!(a = (t_garray *)pd_findbyclass(arrayname, garray_class))) { + if (*arrayname->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, arrayname->s_name); + } + else { + garray_redraw(a); + } +} + +void buffet_redraw(t_buffet *x) +{ + t_garray *a; + if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { + if (*x->wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, x->wavename->s_name); + x->wavebuf->b_valid = 0; + } + else { + garray_redraw(a); + } +} + +void buffet_copy_to_buffer(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_symbol *destname; + + t_word *b_samples; + long b_nchans; + long b_frames; + + t_word *b_dest_samples; + long b_dest_nchans; + long b_dest_frames; + + long startframe; + long endframe; + long chunkframes; + + float fadein,fadeout; + int fadeframes; + // totalframes; + float env; + int i,j,k; + + buffet_setbuf(x, x->wavename); + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + + destname = atom_getsymbolarg(0,argc,argv); + + if(! buffet_setdestbuf(x, destname)){ + post("%s: could not find buffer %s",OBJECT_NAME,destname->s_name); + return; + } + b_dest_samples = x->destbuf->b_samples; + b_dest_nchans = x->destbuf->b_nchans; + b_dest_frames = x->destbuf->b_frames; + + startframe = atom_getfloatarg(1,argc,argv) * .001 * x->sr; + endframe = atom_getfloatarg(2,argc,argv) * .001 * x->sr; + chunkframes = endframe - startframe; + if(chunkframes <= 0){ + return; + } + if(b_nchans != b_dest_nchans){ + error("%s: channel mismatch with buffer %s",OBJECT_NAME, destname->s_name); + return; + } + if(b_dest_frames < chunkframes ){ + // post("%s: %s is too small, truncating copy region",OBJECT_NAME, destname->s_name); + chunkframes = b_dest_frames; + } + if(startframe < 0 || endframe >= b_frames){ + error("%s: bad frame range for source buffer: %ld %ld",OBJECT_NAME, startframe,endframe); + return; + } + /* first clean out destination */ + for(i = 0; i < b_dest_frames; i++){ + b_dest_samples[i].w_float = 0.0; + } + // memset((char *)b_dest_samples, 0, b_dest_frames * b_dest_nchans * sizeof(float)); + + /* now copy segment */ + for(i = 0; i < chunkframes; i++){ + b_dest_samples[i].w_float = b_samples[i+startframe].w_float; + } + + /* memcpy(b_dest_samples, b_samples + (startframe * b_nchans), + chunkframes * b_nchans * sizeof(float) ); */ + + if(argc == 5){ + // post("enveloping"); + fadein = atom_getfloatarg(3,argc,argv); + fadeout = atom_getfloatarg(4,argc,argv); + if(fadein > 0){ + // post("fading in"); + fadeframes = fadein * .001 * x->sr; + + if( fadeframes > b_dest_frames){ + error("%s: fadein is too long",OBJECT_NAME); + return; + } + + + for(i = 0 , k = 0; k < fadeframes ; i += b_dest_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_dest_nchans; j++){ + b_dest_samples[i + j].w_float *= env; + } + } + } + + if(fadeout > 0){ + // post("fading out"); + // totalframes = chunkframes; + fadeframes = fadeout * .001 * x->sr; + startframe = chunkframes - fadeframes; + endframe = chunkframes; + + // endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); // stays the same + + if(startframe < 0){ + error("%s: bad frame boundaries to internal_fadeout: %ld and %ld", + OBJECT_NAME,startframe, endframe); + return; + } + // fadeframes = endframe - startframe; // we already know this + + for(i = (chunkframes-1) * b_dest_nchans , k = 0; k < fadeframes ; i -= b_dest_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_dest_nchans; j++){ + b_dest_samples[i + j].w_float *= env; + } + } + } + } + buffet_redraw_named(x, destname); + outlet_bang(x->bang); +} + +int buffet_setdestbuf(t_buffet *x, t_symbol *wavename) +{ + + t_garray *a; + int b_frames; + t_word *b_samples; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); + x->destbuf->b_valid = 0; + } + else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); + x->destbuf->b_valid = 0; + } + else { + x->destbuf->b_valid = 1; + x->destbuf->b_frames = (long)b_frames; + x->destbuf->b_nchans = 1; + x->destbuf->b_samples = b_samples; + garray_usedindsp(a); + } + /*We added this in linux - better check that it works */ + return x->destbuf->b_valid; +} + +void buffet_rmschunk(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + + t_word *b_samples; + long b_nchans; + long b_frames; + + long bufsamps; + long i; + float meansq; + float rmsval; + long bindex; + + float buffer_duration; + long startframe; + long endframe; + + buffet_setbuf(x, x->wavename); + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + // duration in ms. + buffer_duration = 1000.0 * (float)b_frames / x->sr; + + + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + if(startframe < 0 || startframe >= b_frames - 1){ + error("%s: naughty start frame: %ld",OBJECT_NAME,startframe); + return; + } + if(endframe < 2 || endframe >= b_frames){ + error("%s: naughty start frame: %ld",OBJECT_NAME,startframe); + return; + } + + + bufsamps = (endframe - startframe); + // post("analyzing %d samples",bufsamps); + if(!bufsamps){ + // post("%s: start and end are identical!",OBJECT_NAME); + // post("instantaneous sample value [ch 1 only]: %f", b_samples[startframe*b_nchans]); + return; + } + meansq = 0.0; + for(i = startframe; i < endframe; i++){ + + bindex = b_nchans * i; /* only analyze first channel */ + meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; + + } + + meansq /= (float) bufsamps; + rmsval = sqrt(meansq); + + x->rmschunk = rmsval; + outlet_float(x->floater, (double)x->rmschunk); +} + + +void buffet_dc_gain(t_buffet *x, t_floatarg f) +{ + x->dc_gain = f; +} + +void buffet_dc_coef(t_buffet *x, t_floatarg f) +{ + x->dc_coef = f; +} + +void buffet_autoredraw(t_buffet *x, t_floatarg f) +{ + x->autoredraw = (short)f; +} + +void buffet_minswap(t_buffet *x, t_floatarg f) +{ + if(f < 2.0 * 1000.0 * x->fade / x->sr){ + error("minimum must be at least twice fade time which is %f", 1000. * x->fade / x->sr); + return; + } + x->minframes = f * .001 * x->sr; + // post("min set to %f samples",x->minframes); +} + +void buffet_maxswap(t_buffet *x, t_floatarg f) +{ + long oldmem; + // long framelimit; + long newframes; + + newframes = f * .001 * x->sr; + if(newframes <= x->minframes){ + error("max blocksize must exceed minimum blocksize, which is %f", 1000. * x->minframes/ x->sr); + } + if(newframes > x->storage_maxframes ){ + // post("extending memory"); + oldmem = x->storage_bytes; + // post("old memory %d", oldmem); + x->storage_maxframes = newframes; + x->storage_bytes = (x->storage_maxframes + 1) * 2 * sizeof(float); + // post("new memory %d", x->storage_bytes); + + x->storage = (float *) resizebytes((char *)x->storage, oldmem, x->storage_bytes); + } + x->maxframes = newframes; +} + +void buffet_erase(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_word *b_samples; + long b_nchans; + long b_frames; + long startframe, endframe; + //int slab; + //int offset; + int i; + + if(argc < 2){ + post("%s: erase requires start and end times",OBJECT_NAME); + return; + } + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + if(startframe < 0){ + startframe = 0; + } + if(endframe > b_frames - 1){ + endframe = b_frames - 1; + } + if(startframe >= b_frames - 1){ + error("%s: naughty start frame: %ld",OBJECT_NAME,startframe); + return; + } + if(endframe < 2 || endframe <= startframe){ + error("%s: naughty end frame: %ld",OBJECT_NAME,endframe); + return; + } + + for(i = startframe * b_nchans; i < endframe * b_nchans; i++){ + b_samples[i].w_float = 0.0; + } + + buffet_update(x); +} + + +void buffet_rotatetozero(t_buffet *x, t_floatarg f) +{ + int i; + float target = (float) f; + long shiftframes = (long) (target * 0.001 * x->sr); + + t_word *b_samples; + long b_nchans; + long b_frames; + float *tmpmem; + + + + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + + + if(shiftframes <= 0 || shiftframes >= b_frames){ + error("%s: shift target %f is out of range",OBJECT_NAME,target); + return; + } + + tmpmem = (float *) malloc(shiftframes * b_nchans * sizeof(float)); + + /* copy shift block to tmp */ + for(i = 0; i < shiftframes; i++){ + tmpmem[i] = b_samples[i].w_float; + } + // memcpy(tmpmem, b_samples, shiftframes * b_nchans * sizeof(float)); + + + /* now shift the rest to the top */ + for(i = 0; i < b_frames - shiftframes; i++){ + b_samples[i].w_float =b_samples[i+shiftframes].w_float; + } + /* + memmove(b_samples, b_samples + (shiftframes * b_nchans), + (b_frames - shiftframes) * b_nchans * sizeof(float)); + */ + + /* finally copy tmp to the tail */ + + for(i = 0; i < shiftframes; i++){ + b_samples[(b_frames - shiftframes)+i].w_float = tmpmem[i]; + } + /* memcpy(b_samples + (b_frames - shiftframes) * b_nchans,tmpmem, + shiftframes * b_nchans * sizeof(float )); + */ + free(tmpmem); + buffet_update(x); +} + +void buffet_normalize(t_buffet *x, t_floatarg f) +{ + + float target = (float) f; + t_word *b_samples; + long b_nchans; + long b_frames; + long i; + float maxamp = 0.0; + float amptest; + float rescale; + + if(target <= 0.0){ + error("%s: normalize target %f is too low",OBJECT_NAME,target); + return; + } + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + for(i = 0; i < b_frames * b_nchans; i++){ + amptest = fabs(b_samples[i].w_float); + if(maxamp < amptest) + maxamp = amptest; + } + + if(maxamp < .000000001){ + post("%s: amplitude zero or too low to normalize in \"%s\"",OBJECT_NAME,x->wavename->s_name); + return; + } + rescale = target / maxamp; + if(rescale > .99 && rescale < 1.01){ + post("%s: \"%s\" already normalized to %f",OBJECT_NAME,x->wavename->s_name,target); + } + else { + for(i = 0; i < b_frames * b_nchans; i++){ + b_samples[i].w_float *= rescale; + } + } + buffet_update(x); +} + + +void buffet_fadein(t_buffet *x, t_floatarg f) +{ + long fadeframes; + long totalframes; + int i,j,k; + float env; + t_word *b_samples; + long b_nchans; + + + if( ! x->sr){ + error("zero sample rate!"); + return; + } + fadeframes = f * .001 * x->sr; + //post("fading in %d frames",fadeframes); + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + + + if( fadeframes > totalframes){ + error("fadein is too long"); + return; + } + for(i = 0, k = 0;i < fadeframes * b_nchans; i += b_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_nchans; j++){ + b_samples[i + j].w_float *= env; + } + } + buffet_update(x); +} + +void buffet_fadeout(t_buffet *x, t_floatarg f) +{ + long fadeframes; + long totalframes; + int i,j,k; + float env; + t_word *b_samples; + long b_nchans; + + + if( ! x->sr){ + error("zero sample rate!"); + return; + } + fadeframes = f * .001 * x->sr; + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + + + if( fadeframes > totalframes){ + error("%s: fadein is too long",OBJECT_NAME); + return; + } + for(i = (totalframes-1) * b_nchans , k = 0; k < fadeframes ; i -= b_nchans, k++ ){ + env = (float) k / (float) fadeframes; + for(j = 0; j < b_nchans; j++){ + b_samples[i + j].w_float *= env; + } + } + buffet_update(x); +} + + + +void buffet_killdc(t_buffet *x) +{ + // long fadeframes; + long totalframes; + int i,j; + t_word *b_samples; + long b_nchans; + float dc_coef = x->dc_coef; + float a0[MAX_CHANNELS]; + float a1[MAX_CHANNELS]; + float b0[MAX_CHANNELS]; + float b1[MAX_CHANNELS]; + + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(b_nchans > MAX_CHANNELS) { + error("buffer has too many channels"); + return; + } + for(j = 0; j < b_nchans; j++){ + a0[j] = a1[j] = b0[j] = b1[j] = 0.0; + } + + for(i = 0; i < totalframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + a0[j] = b_samples[i + j].w_float; + b0[j] = a0[j] - a1[j] + dc_coef * b1[j]; + b_samples[i + j].w_float = b0[j]; + b1[j] = b0[j]; + a1[j] = a0[j]; + } + } + buffet_update(x); +} + + +void *buffet_new(t_symbol *msg, short argc, t_atom *argv) +{ + + + // int i; + + srand(clock()); + + t_buffet *x = (t_buffet *)pd_new(buffet_class); + x->bang = outlet_new(&x->x_obj, gensym("bang")); + x->list = outlet_new(&x->x_obj, gensym("list")); + x->floater = outlet_new(&x->x_obj, gensym("float")); + + x->sr = sys_getsr(); + if(! x->sr ) + x->sr = 44100; + + if(argc <= 1 || argv[0].a_type != A_SYMBOL) { + post("%s: warning: no array name provided: defaulting to empty symbol", + OBJECT_NAME); + } + atom_arg_getsym(&x->wavename,0,argc,argv); + atom_arg_getfloat(&x->minframes,1,argc,argv); + atom_arg_getfloat(&x->maxframes,2,argc,argv); + if(!x->minframes) + x->minframes = 100; + if(!x->maxframes) + x->maxframes = x->minframes + 10; + + buffet_init(x,0); + + + + return (x); +} + +void buffet_init(t_buffet *x, short initialized) +{ + if(x->minframes <= 0) + x->minframes = 250; + if(x->maxframes <= 0) + x->maxframes = 1000; + + if(!initialized){ + x->minframes *= .001 * x->sr; + x->storage_maxframes = x->maxframes *= .001 * x->sr; + x->fade = .001 * 20 * x->sr; // 20 ms fadetime to start + x->storage_bytes = (x->maxframes + 1) * 2 * sizeof(float); // stereo storage frames + x->storage = (float *) getbytes(x->storage_bytes); + x->dc_coef = .995; // for dc blocker + x->dc_gain = 4.0; + x->autoredraw = 1; + x->rmsbuf = (float *) getbytes(MAX_RMS_BUFFER * x->sr * sizeof(float)); + memset((char *)x->rmsbuf, 0, MAX_RMS_BUFFER * x->sr * sizeof(float)); + x->listdata = (t_atom *)getbytes(MAX_EVENTS * sizeof(t_atom));// lots of events + x->analbuf = (float *) getbytes(MAX_RMS_FRAMES * sizeof(float)); + memset((char *)x->analbuf, 0, MAX_RMS_FRAMES * sizeof(float)); + x->onset = (float *) getbytes(MAX_EVENTS * sizeof(float)); + x->wavebuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); + x->destbuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); + } else { + x->minframes *= .001 * x->sr; + x->storage_maxframes = x->maxframes *= .001 * x->sr; + x->fade = .001 * 20 * x->sr; // 20 ms fadetime to start + x->storage_bytes = (x->maxframes + 1) * 2 * sizeof(float); // stereo storage frames + x->storage = (float *) resizebytes((char *)x->storage_bytes,0,x->storage_bytes); + x->rmsbuf = (float *)resizebytes((char *)x->rmsbuf,0,MAX_RMS_BUFFER * x->sr * sizeof(float)); + memset((char *)x->rmsbuf, 0, MAX_RMS_BUFFER * x->sr * sizeof(float)); + } +} + + +void buffet_nosync_setswap(t_buffet *x) +{ + long totalframes = x->wavebuf->b_frames; + + float minframes = x->minframes; + float maxframes = x->maxframes; + long swapframes = x->swapframes; + long r1startframe = x->r1startframe; + long r2startframe = x->r2startframe; + long r1endframe; + long r2endframe; + long region1; + long region2; + + + swapframes = buffet_boundrand(minframes, maxframes); + r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); + r1endframe = r1startframe + swapframes; + region1 = r1startframe; + region2 = totalframes - r1endframe; + if(swapframes > region1){ + r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); + } else if(swapframes > region2) { + r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); + } else { // either region ok + if(buffet_boundrand(0.0,1.0) > 0.5){ + r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); + } else { + r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); + } + } + r2endframe = r2startframe + swapframes; + + if(r2startframe < 0 || r1startframe < 0){ + error("start frame less than zero!"); + return; + } + if(r2endframe >= totalframes || r1endframe >= totalframes){ + error("end frame reads beyond buffer!"); + return; + } + x->swapframes = swapframes; + x->r1startframe = r1startframe; + x->r2startframe = r2startframe; + outlet_bang(x->bang); +} + + +void buffet_swap(t_buffet *x) +{ + + float maxframes = x->maxframes; + float fade = x->fade; + long totalframes; + long swapframes; + long start_sample1; + long start_sample2; + float *storage = x->storage; + t_word *b_samples; + float mix_sample; + float fadein_gain; + float fadeout_gain; + float fadephase; + long b_nchans; + int i,j,k; + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(totalframes < maxframes * 2 + 1){ + error("buffer must contain at least twice as many samples as the maximum swap size"); + return; + } + if(b_nchans > 2){ + error("buffet~ only accepts mono or stereo buffers"); + return; + } + + buffet_nosync_setswap(x); + + + start_sample1 = x->r1startframe * b_nchans; + start_sample2 = x->r2startframe * b_nchans; + swapframes = x->swapframes; + + // store block1 samples + for(i = 0; i < swapframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + storage[i+j] = b_samples[start_sample1 + i + j].w_float; + } + } + // swap block2 into block1 location, fadein + + for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++){ + fadephase = ((float)k / (float) fade) * PIOVERTWO; + fadein_gain = sin(fadephase); + fadeout_gain = cos(fadephase); + for(j = 0; j < b_nchans; j++){ + mix_sample = fadein_gain * b_samples[start_sample2 + i + j].w_float + fadeout_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + // middle part, pure swap + + for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; + } + } + // fade out + + for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++){ + fadephase = ((float)k / (float) fade) * PIOVERTWO; + fadein_gain = sin(fadephase); + fadeout_gain = cos(fadephase); + for(j = 0; j < b_nchans; j++){ + mix_sample = fadeout_gain * b_samples[start_sample2 + i + j].w_float + fadein_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + // now mix stored block1 into block2 location + // swap block2 into block1 location, fadein + + for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample2 + i + j].w_float; + b_samples[start_sample2 + i + j].w_float = mix_sample; + } + } + // middle part, pure swap + + for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample2 + i + j].w_float = storage[i + j]; + } + } + // fade out + + for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample2 + i + j].w_float; + b_samples[start_sample2 + i + j].w_float = mix_sample; + } + } + buffet_update(x); +} + + +void buffet_specswap(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + // float minframes = x->minframes; + float maxframes = x->maxframes; + float fade = x->fade; + long totalframes; + long swapframes; + long r1startframe; + long r1endframe; + long r2startframe; + long r2endframe; + long region1; + long region2; + long start_sample1; + long start_sample2; + float *storage = x->storage; + t_word *b_samples; + float mix_sample; + float fadein_gain; + float fadeout_gain; + float fadephase; + long b_nchans; + int i,j,k; + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(totalframes < maxframes * 2 + 1){ + error("buffer must contain at least twice as many samples as the maximum swap size"); + return; + } + if(b_nchans > 2){ + error("buffet~ only accepts mono or stereo buffers"); + return; + } + + r1startframe = x->sr * .001 * atom_getfloatarg(0,argc,argv); + r2startframe = x->sr * .001 * atom_getfloatarg(1,argc,argv); + swapframes = x->sr * .001 * atom_getfloatarg(2,argc,argv); + if( r1startframe < 0 || r1startframe >= totalframes){ + error("bad first skip time"); + return; + } + if( r2startframe < 0 || r2startframe >= totalframes){ + error("bad second skip time"); + return; + } + // post("start1 %d start2 %d swaps %d",r1startframe,r2startframe,swapframes ); + + r1endframe = r1startframe + swapframes; + r2endframe = r2startframe + swapframes; + region1 = r1startframe; + region2 = totalframes - r1endframe; + /* + post("min: %.0f, max: %.0f, total: %d, swap: %d",minframes, maxframes,totalframes, swapframes); + post("r1st %d, r1end %d, region1 %d, region2 %d",r1startframe, r1endframe, region1, region2); + */ + if(swapframes > x->storage_maxframes) { + error("swapsize %ld is larger than %ld; reset maximum swap.", swapframes,x->storage_maxframes ); + return; + } + if(r1endframe >= totalframes){ + error("block 1 reads beyond buffer!"); + return; + } + if(r2endframe >= totalframes){ + error("block 2 reads beyond buffer!"); + return; + } + + // store block1 samples + start_sample1 = r1startframe * b_nchans; + start_sample2 = r2startframe * b_nchans; + for(i = 0; i < swapframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + storage[i+j] = b_samples[start_sample1 + i + j].w_float; + } + } + // swap block2 into block1 location, fadein + + for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++){ + fadephase = ((float)k / (float) fade) * PIOVERTWO; + fadein_gain = sin(fadephase); + fadeout_gain = cos(fadephase); + for(j = 0; j < b_nchans; j++){ + mix_sample = fadein_gain * b_samples[start_sample2 + i + j].w_float + fadeout_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + // middle part, pure swap + + for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; + } + } + // fade out + + for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++){ + fadephase = ((float)k / (float) fade) * PIOVERTWO; + fadein_gain = sin(fadephase); + fadeout_gain = cos(fadephase); + for(j = 0; j < b_nchans; j++){ + mix_sample = fadeout_gain * b_samples[start_sample2 + i + j].w_float + fadein_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + // now mix stored block1 into block2 location + // swap block2 into block1 location, fadein + + for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample2 + i + j].w_float; + b_samples[start_sample2 + i + j].w_float = mix_sample; + } + } + // middle part, pure swap + + for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample2 + i + j].w_float = storage[i + j]; + } + } + // fade out + + for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample2 + i + j].w_float; + b_samples[start_sample2 + i + j].w_float = mix_sample; + } + } + buffet_update(x); +} + + +void buffet_retroblock(t_buffet *x) +{ + float minframes = x->minframes; + float maxframes = x->maxframes; + float fade = x->fade; + long totalframes; + long swapframes; + long r1startframe; + long r1endframe; + long start_sample1; + float *storage = x->storage; + t_word *b_samples; + float mix_sample; + float fadein_gain; + float fadeout_gain; + // float fadephase; + long ub1, lb1; + long ub2, lb2; + long block1size,block2size; + long b_nchans; + long syncframe; + int i,j,k; + buffet_setbuf(x, x->wavename); + if(x->hosed){ + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(totalframes < maxframes * b_nchans + 1){ + error("buffer must contain at least twice as many samples as the maximum swap size"); + return; + } + if(b_nchans > 2){ + error("buffet~ only accepts mono or stereo buffers"); + return; + } + syncframe = x->sync * totalframes; + swapframes = buffet_boundrand(minframes, maxframes); + if(x->sync <= 0.0 ){ // either no sync signal or it is zero + r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); + r1endframe = r1startframe + swapframes; + } else { + // avoid swapping where we are playing from buffer + lb1 = 0; + ub1 = syncframe - CUSHION_FRAMES; // could be reading buffer backwards + lb2 = ub1 + CUSHION_FRAMES; + ub2 = totalframes - 1; + block1size = ub1 - lb1; + block2size = ub2 - lb2; + + if(block1size < maxframes && block2size < maxframes ) { + error("could not reverse block"); + return; + } + if(block1size >= maxframes && block2size >= maxframes){ + if(buffet_boundrand(0.0,1.0) > 0.5){ + r1startframe = buffet_boundrand(0.0, (float)(ub1-swapframes)); + } else { + r1startframe = buffet_boundrand((float)lb2, (float)(ub2-swapframes)); + } + } else if(block1size < maxframes) { + r1startframe = buffet_boundrand((float)lb2, (float)(ub2-swapframes)); + } else { + r1startframe = buffet_boundrand(0.0, (float)(ub1-swapframes)); + } + r1endframe = r1startframe + swapframes; + } + + + if(r1endframe >= totalframes){ + error("%s: retro beyond bounds",OBJECT_NAME); + return; + } + + // store block1 samples + start_sample1 = r1startframe * b_nchans; + // start_sample2 = r2startframe * b_nchans; + // store block in reversed order + for(k = 0, i = (swapframes-1) * b_nchans; i > 0; i -= b_nchans, k += b_nchans){ + for(j = 0; j < b_nchans; j++){ + storage[i+j] = b_samples[start_sample1 + k + j].w_float; + } + } + // swap block2 into block1 location, fadein + + for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + // middle part, pure swap + + + for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample1 + i + j].w_float = storage[i + j]; + } + } + // fade out + + for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++){ + fadein_gain = (float)k / (float) fade; + fadeout_gain = 1.0 - fadein_gain; + for(j = 0; j < b_nchans; j++){ + mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample1 + i + j].w_float; + b_samples[start_sample1 + i + j].w_float = mix_sample; + } + } + buffet_update(x); +} + +// clicky version +void buffet_nakedswap(t_buffet *x) +{ + //long + long minframes = x->minframes; + long maxframes = x->maxframes; + long totalframes; + long swapframes; + long r1startframe; + long r1endframe; + long r2startframe; + long r2endframe; + long region1; + long region2; + long start_sample1; + long start_sample2; + float *storage = x->storage; + t_word *b_samples; + long b_nchans; + int i,j; + buffet_setbuf(x, x->wavename); + + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + totalframes = x->wavebuf->b_frames; + + if(totalframes < maxframes * 2 + 1){ + error("buffer must contain at least twice as many samples as the maximum swap size"); + return; + } + if(b_nchans != 2){ + error("buffet~ only accepts stereo buffers"); + return; + } + swapframes = buffet_boundrand((float)minframes, (float)maxframes); + r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); + r1endframe = r1startframe + swapframes; + region1 = r1startframe; + region2 = totalframes - r1endframe; + + if(swapframes > region1){ + r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); + } else if(swapframes > region2) { + r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); + } else { + if(buffet_boundrand(0.0,1.0) > 0.5){ + r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); + } else { + r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); + } + } + r2endframe = r2startframe + swapframes; + if(r2startframe < 0 || r1startframe < 0){ + error("start frame less than zero!"); + return; + } + if(r2endframe >= totalframes || r1endframe >= totalframes){ + error("end frame reads beyond buffer!"); + return; + } + // Now swap the samples. For now no cross fade + start_sample1 = r1startframe * b_nchans; + start_sample2 = r2startframe * b_nchans; + for(i = 0; i < swapframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + storage[i+j] = b_samples[start_sample1 + i + j].w_float; + } + } + // swap block1 into block2 + for(i = 0; i < swapframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; + } + } + // swap stored block into block1 + for(i = 0; i < swapframes * b_nchans; i += b_nchans){ + for(j = 0; j < b_nchans; j++){ + b_samples[start_sample2 + i + j].w_float = storage[i + j]; + } + } + buffet_update(x); +} + +void buffet_setbuf(t_buffet *x, t_symbol *wavename) +{ + + t_garray *a; + int b_frames; + t_word *b_samples; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); + x->wavebuf->b_samples = 0; + x->wavebuf->b_valid = 0; + } + else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); + x->wavebuf->b_valid = 0; + } + else { + x->wavebuf->b_valid = 1; + x->wavebuf->b_frames = b_frames; + x->wavebuf->b_nchans = 1; + x->wavebuf->b_samples = b_samples; + garray_usedindsp(a); + } + +} + + +t_int *buffet_perform(t_int *w) +{ + t_buffet *x = (t_buffet *) (w[1]); + float *sync = (t_float *)(w[2]); + int n = (int) w[3]; + + while(n--){ + x->sync = *sync++; + } + + return (w+4); +} + + +float buffet_boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); +} + +void buffet_detect_onsets(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_word *b_samples; + long b_nchans; + long b_frames; + t_atom *listdata = x->listdata; + long startframe; + long currentframe; + long endframe; + long sample_frames; + long fft_frames; + int R = x->sr; + int N = 1024; + int N2 = N / 2; + int Nw = N; + int Nw2 = Nw / 2; + int D = N / 2; + int i,j,k,m; + // float sb1,sb2,sb3,sb4,energy=0,lastenergy; + float freqcenter=0; + float tmp; + float fave; // freq average + short first = 1; + float dsum; + short suppress = 0; + float suppressrt = 0; + + float rt, rtadv; + int inCount; + float *Wanal; + float *Wsyn; + float *input; + float *Hwin; + float *buffer; + float *channel; + float *output; + float *input_vec; + float *specdiff; + float *freqdiff; + float *hfc; + float *freqs, *amps; + float lastfreqs[5]; + float fdiffs[5]; + float *onsets; + float **loveboat; + float *c_lastphase_in; + float *c_lastphase_out; + float c_fundamental; + float c_factor_in; + float *trigland; + int *bitshuffle; + int topanalbin; + float threshold; + int bytesize; + + int MAX_ONSETS = 2048; + int onset_count = 0; + + buffet_setbuf(x, x->wavename); + if( x->hosed ){ + error("buffet~ needs a valid buffer"); + return; + } + if(argc < 4){ + post("%s: detect_onsets requires start and end times,threshold and FFTsize",OBJECT_NAME); + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + threshold = atom_getfloatarg(2,argc,argv); + N = atom_getfloatarg(3,argc,argv); + N2 = N / 2; + Nw = N; + Nw2 = Nw / 2; + D = N / 2; + + + sample_frames = endframe - startframe; + fft_frames = sample_frames / D; + + c_fundamental = (float)R / (float)N; + inCount = -Nw; + c_factor_in = (float)R/((float)D * TWOPI); + + rt = startframe * 1000.0 / x->sr; + rtadv = 1000. * (float)D/(float)R; + + post("we will analyze %d FFT frames",fft_frames); + + Wanal = (float *) getbytes(Nw * sizeof(float)); + Wsyn = (float *) getbytes(Nw * sizeof(float)); + Hwin = (float *) getbytes(Nw * sizeof(float)); + input = (float *) getbytes(Nw * sizeof(float) ); + output = (float *) getbytes(Nw * sizeof(float) ); + buffer = (float *) getbytes(N * sizeof(float)); + channel = (float *) getbytes((N+2) * sizeof(float) ); + bitshuffle = (int *) getbytes(N * 2 * sizeof(int)); + bytesize = N * 2 * sizeof(float); + // post("allocing %d bytes to trigland",N * 2 * sizeof(float)); + + trigland = (float *) getbytes(N * 2 * sizeof(float)); + // post("cleaning %d bytes in trigland",N * 2 * sizeof(float)); + + + c_lastphase_in = (float *) getbytes((N2+1) * sizeof(float)); + c_lastphase_out = (float *) getbytes((N2+1) * sizeof(float)); + + input_vec = (float *) getbytes(D * sizeof(float)); + onsets = (float *) getbytes(MAX_ONSETS * sizeof(float)); + specdiff = (float *) getbytes(fft_frames * sizeof(float)); + freqdiff = (float *) getbytes(fft_frames * sizeof(float)); + hfc = (float *) getbytes(fft_frames * sizeof(float)); + loveboat = (float **) getbytes(fft_frames * sizeof(float *)); + + freqs = (float *) getbytes(N * sizeof(float)); + amps = (float *) getbytes(N * sizeof(float)); + for(i = 0; i < fft_frames; i++){ + loveboat[i] = (float *) getbytes((N+2) * sizeof(float)); + if(loveboat[i] == NULL){ + error("memory error"); + return; + } + // memset((char *)loveboat[i],0,(N+2)*sizeof(float)); + } + + memset((char *)trigland,0, N * 2 * sizeof(float)); + memset((char *)input,0,Nw * sizeof(float)); + memset((char *)output,0,Nw * sizeof(float)); + memset((char *)c_lastphase_in,0,(N2+1) * sizeof(float)); + memset((char *)c_lastphase_out,0,(N2+1) * sizeof(float)); + memset((char *)bitshuffle,0, 2 * N * sizeof(int)); + + + makewindows(Hwin, Wanal, Wsyn, Nw, N, D); + + + init_rdft(N, bitshuffle, trigland); + + currentframe = startframe; + + for(k = 0; k < fft_frames; k++){ + for(j = 0; j < D; j++){ + input_vec[j] = b_samples[(currentframe + j) * b_nchans].w_float;// only read first channel + } + currentframe += D; + + for ( j = 0 ; j < Nw - D ; j++ ){ + input[j] = input[j+D]; + } + for (i = 0, j = Nw - D; j < Nw; j++, i++) { + input[j] = input_vec[i]; + } + fold(input, Wanal, Nw, buffer, N, inCount); + rdft(N, 1, buffer, bitshuffle, trigland); + convert(buffer, loveboat[k], N2, c_lastphase_in, c_fundamental, c_factor_in); + } + + topanalbin = 11000.0 / c_fundamental; + // post("top bin %d",topanalbin); + + for(j = 0; j < 5; j++) + lastfreqs[j] = 0; + + for(i = 0, k = 1; i < fft_frames - 1; i++, k++){ + + for(j = 0; j < 5; j++) + lastfreqs[j] = freqs[j]; + + for(j = 2, m = 0; j < topanalbin * 2; j += 2, m++){ // skip lowest bin + freqcenter += fabs(loveboat[i][j]) * fabs(loveboat[i][j+1]); + amps[m] = fabs(loveboat[i][j]); + freqs[m] = loveboat[i][j+1]; + } + /* swap top freqs to the top - but note there is a problem if some lower partials + vacillate over which is the weakest since it will swap places and generate spurious + change of frequency info. */ + + for(j = 0; j < topanalbin-1; j++){ + for(m = j + 1 ; m < topanalbin; m++){ + if(amps[m]> amps[j]){ + tmp = amps[j]; + amps[j] = amps[m]; + amps[m] = tmp; + tmp = freqs[j]; + freqs[j] = freqs[m]; + freqs[m] = tmp; + } + } + } + + if(first){ + first = 0; + for(j = 0; j < 5; j++){ + lastfreqs[j] = freqs[j]; + } + } + for(j = 0; j < 5; j++){ + fave = (lastfreqs[j] + freqs[j]) * 0.5; + if(fave > 0) + fdiffs[j] = fabs(lastfreqs[j] - freqs[j])/fave; + else + fdiffs[j] = 0; + } + dsum = fdiffs[0] + .5 * fdiffs[1] + .25 * fdiffs[2] + .125 * fdiffs[3] + .0625 * fdiffs[4]; + if(dsum > threshold && ! suppress){ + suppress = 1; + suppressrt = 0; + onsets[onset_count++] = rt; + /* + post("%.2f: f1 %.2f d1 %.2f f2 %.2f d2 %.2f f3 %.2f d3 %.2f f4 %.2f d4 %.2f f5 %.2f d5 %.2f, dsum: %f", + rt, freqs[0],fdiffs[0], freqs[1],fdiffs[1], freqs[2],fdiffs[2], freqs[3],fdiffs[3], freqs[4],fdiffs[4], dsum); + */ + + } else { + suppressrt += rtadv; + if(suppressrt > 100){ // 100 ms latency + suppress = 0; + } + + } + rt += rtadv; + } + + post("%s: %d onsets detected",OBJECT_NAME,onset_count); + for(i = 0; i < onset_count; i++){ + SETFLOAT(listdata + i, onsets[i]); + } + + outlet_list(x->list, 0, onset_count, listdata); + outlet_bang(x->bang); + // free memory at end of routine +} + +void buffet_detect_subband_onsets(t_buffet *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_word *b_samples; + long b_nchans; + long b_frames; + long startframe; + long currentframe; + long endframe; + long sample_frames; + long fft_frames; + int R = x->sr; + int N = 1024; + int N2 = N / 2; + int Nw = N; + int Nw2 = Nw / 2; + int D = N / 2; + int i,j,k,l; + int minbin,maxbin; + + + float rt, rtadv; + int inCount; + float *Wanal; + float *Wsyn; + float *input; + float *Hwin; + float *buffer; + float *channel; + float *output; + float *input_vec; + float *specdiff; + float *freqdiff; + float *hfc; + float *freqs, *amps; + + float subband_energy[5]; + float subband_freqdiff[5]; + int subband_bincuts[6]; + + float *onsets; + float **loveboat; + + float *c_lastphase_in; + float *c_lastphase_out; + float c_fundamental; + float c_factor_in; + + float *trigland; + int *bitshuffle; + + + float threshold; + + + int MAX_ONSETS = 2048; + + buffet_setbuf(x, x->wavename); + if( x->hosed ){ + error("buffet~ needs a valid buffer"); + return; + } + if(argc < 4){ + post("%s: detect_onsets requires start and end times,threshold and FFTsize",OBJECT_NAME); + return; + } + b_samples = x->wavebuf->b_samples; + b_nchans = x->wavebuf->b_nchans; + b_frames = x->wavebuf->b_frames; + startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); + endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); + threshold = atom_getfloatarg(2,argc,argv); + N = atom_getfloatarg(3,argc,argv); + N2 = N / 2; + Nw = N; + Nw2 = Nw / 2; + D = N / 2; + + if(!endframe) + endframe = b_frames; + + sample_frames = endframe - startframe; + fft_frames = sample_frames / D; + + c_fundamental = (float)R / (float)N; + inCount = -Nw; + c_factor_in = (float)R/((float)D * TWOPI); + + rt = startframe * 1000.0 / x->sr; + rtadv = 1000. * (float)D/(float)R; + + post("we will analyze %d FFT frames",fft_frames); + subband_bincuts[0] = 1; + subband_bincuts[1] = (int) (500.0 / c_fundamental); + subband_bincuts[2] = (int) (1000.0 / c_fundamental); + subband_bincuts[3] = (int) (2000.0 / c_fundamental); + subband_bincuts[4] = (int) (4000.0 / c_fundamental); + subband_bincuts[5] = (int) (8000.0 / c_fundamental); + + Wanal = (float *) getbytes(Nw * sizeof(float)); + Wsyn = (float *) getbytes(Nw * sizeof(float)); + Hwin = (float *) getbytes(Nw * sizeof(float)); + input = (float *) getbytes(Nw * sizeof(float) ); + output = (float *) getbytes(Nw * sizeof(float) ); + buffer = (float *) getbytes(N * sizeof(float)); + channel = (float *) getbytes((N+2) * sizeof(float) ); + bitshuffle = (int *) getbytes(N * 2 * sizeof(int)); + trigland = (float *) getbytes(N * 2 * sizeof(float)); + c_lastphase_in = (float *) getbytes((N2+1) * sizeof(float)); + c_lastphase_out = (float *) getbytes((N2+1) * sizeof(float)); + + input_vec = (float *) getbytes(D * sizeof(float)); + onsets = (float *) getbytes(MAX_ONSETS * sizeof(float)); + specdiff = (float *) getbytes(fft_frames * sizeof(float)); + freqdiff = (float *) getbytes(fft_frames * sizeof(float)); + hfc = (float *) getbytes(fft_frames * sizeof(float)); + loveboat = (float **) getbytes(fft_frames * sizeof(float *)); + + freqs = (float *) getbytes(N * sizeof(float)); + amps = (float *) getbytes(N * sizeof(float)); + for(i = 0; i < fft_frames; i++){ + loveboat[i] = (float *) getbytes((N+2) * sizeof(float)); + if(loveboat[i] == NULL){ + error("memory error"); + return; + } + // memset((char *)loveboat[i],0,(N+2)*sizeof(float)); + } + + memset((char *)trigland,0, N * 2 * sizeof(float)); + memset((char *)input,0,Nw * sizeof(float)); + memset((char *)output,0,Nw * sizeof(float)); + memset((char *)c_lastphase_in,0,(N2+1) * sizeof(float)); + memset((char *)c_lastphase_out,0,(N2+1) * sizeof(float)); + memset((char *)bitshuffle,0, 2 * N * sizeof(int)); + + + makewindows(Hwin, Wanal, Wsyn, Nw, N, D); + + + init_rdft(N, bitshuffle, trigland); + + currentframe = startframe; + + for(k= 0; k < 5; k++){ + minbin = subband_bincuts[k]; maxbin = subband_bincuts[k+1]; + post("%d: minbin %d maxbin %d",k, minbin,maxbin); + } + + for(k = 0; k < fft_frames; k++){ + for(j = 0; j < D; j++){ + input_vec[j] = b_samples[(currentframe + j) * b_nchans].w_float;// only read first channel + } + currentframe += D; + + for ( j = 0 ; j < Nw - D ; j++ ){ + input[j] = input[j+D]; + } + for (i = 0, j = Nw - D; j < Nw; j++, i++) { + input[j] = input_vec[i]; + } + fold(input, Wanal, Nw, buffer, N, inCount); + rdft(N, 1, buffer, bitshuffle, trigland); + convert(buffer, loveboat[k], N2, c_lastphase_in, c_fundamental, c_factor_in); + } + + rt = rtadv; + for(i = 0, j = 1; i < fft_frames - 1; i++, j++){ + + + for(k= 0; k < 5; k++){ + minbin = subband_bincuts[k]; maxbin = subband_bincuts[k+1]; + subband_energy[k] = 0; + subband_freqdiff[k] = 0; + /* maxamp = 0; + for(l = minbin * 2; l < maxbin * 2; l += 2){ + } */ + for(l = minbin * 2; l < maxbin * 2; l += 2){ + // subband_energy[k] += (loveboat[j][l] * loveboat[j][l]) - (loveboat[i][l] * loveboat[i][l]); + subband_freqdiff[k] += (fabs(loveboat[j][l+1] - loveboat[i][l+1])/loveboat[i][l+1]) * + loveboat[j][l] * loveboat[j][l] ;// scale by energy + } + } + /* + post("rt: %.2f sb1 %f sb2 %f sb3 %f sb4 %f sb5 %f", + rt, subband_energy[0],subband_energy[1],subband_energy[2],subband_energy[3],subband_energy[4] + ); + */ + post("rt:%f fb1 %f fb2 %f fb3 %f fb4 %f fb5 %f", + rt, subband_freqdiff[0],subband_freqdiff[1],subband_freqdiff[2],subband_freqdiff[3],subband_freqdiff[4] + ); + /* + post("%.2f: f1 %.2f d1 %.2f f2 %.2f d2 %.2f f3 %.2f d3 %.2f f4 %.2f d4 %.2f f5 %.2f d5 %.2f, dsum: %f", + rt, freqs[0],fdiffs[0], freqs[1],fdiffs[1], freqs[2],fdiffs[2], freqs[3],fdiffs[3], freqs[4],fdiffs[4], dsum); + */ + + + rt += rtadv; + } + /* + post("%s: %d onsets detected",OBJECT_NAME,onset_count); + for(i = 0; i < onset_count; i++){ + SETFLOAT(listdata + i, onsets[i]); + } + + outlet_list(x->list, 0, onset_count, listdata); + + outlet_bang(x->bang); + */ + // free memory at end of routine +} + + +/* should really be using malloc/free instead of annoying MSPd routines */ +void buffet_dsp_free(t_buffet *x) +{ + + freebytes(x->storage,0); + freebytes(x->listdata,0); + freebytes(x->rmsbuf,0); + freebytes(x->analbuf,0); + freebytes(x->onset,0); + freebytes(x->wavebuf,0); + freebytes(x->destbuf,0); +} + +void buffet_dsp(t_buffet *x, t_signal **sp) +{ + + buffet_setbuf(x, x->wavename); + + if( x->hosed ){ + error("buffet~ needs a valid buffer"); + return; + } + if( x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + + if(!x->sr){ + post("%s: warning: zero sampling rate!",OBJECT_NAME); + x->sr = 44100; + } + buffet_init(x,1); + } + + dsp_add(buffet_perform, 3, x, + sp[0]->s_vec, sp[0]->s_n); + +} + diff --git a/externals/lyonpotpourri/bvplay~-help.pd b/externals/lyonpotpourri/bvplay~-help.pd new file mode 100755 index 000000000..103f6f156 --- /dev/null +++ b/externals/lyonpotpourri/bvplay~-help.pd @@ -0,0 +1,52 @@ +#N canvas 234 181 552 434 10; +#N canvas 348 477 724 547 load-a-sound 0; +#X obj 49 170 soundfiler; +#X obj 49 119 openpanel; +#X obj 49 92 inlet; +#X msg 49 142 read -resize \$1 bvplay-demo-array; +#X obj 354 89 loadbang; +#X msg 354 125 read -resize sound/voice.wav bvplay-demo-array; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 0 0; +#X restore 9 86 pd load-a-sound; +#X obj 9 57 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1 +; +#N canvas 0 22 450 300 (subpatch) 0; +#X array bvplay-demo-array 62079 float 2; +#X coords 0 1 62079 -1 200 140 1; +#X restore 10 140 graph; +#X obj 250 217 bvplay~ bvplay-demo-array 1 30; +#X obj 250 283 *~ 0.5; +#X floatatom 289 263 5 0 0 0 - - -, f 5; +#X obj 292 242 hsl 64 12 0 1 0 0 empty empty empty -2 -8 0 10 -180201 +-1 -1 0 1; +#X obj 250 316 dac~; +#X text 12 345 Send note statements to bvplay~ in list format: [skip +duration increment amplitude], f 83; +#X text 271 201 args: name \, chans \, taper; +#X msg 225 101 taper \$1; +#X floatatom 225 84 5 0 0 0 - - -, f 5; +#X text 290 100 set fadein/fadeout for each note; +#X text 12 369 bvplay~ will omit overlapped notes \, but multiple units +can be used for polyphony., f 82; +#X text 187 32 bvplay~ - Enveloped array playback; +#X text 28 58 <- first load in a sound (recommend at least 5 secs.) +; +#X text 368 133 example notes; +#X msg 250 133 0 500 1.2 1; +#X msg 271 153 900 1000 -0.5 1; +#X obj 8 22 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X connect 1 0 0 0; +#X connect 3 0 4 0; +#X connect 4 0 7 0; +#X connect 4 0 7 1; +#X connect 5 0 4 1; +#X connect 6 0 5 0; +#X connect 10 0 3 0; +#X connect 11 0 10 0; +#X connect 17 0 3 0; +#X connect 18 0 3 0; diff --git a/externals/lyonpotpourri/bvplay~.c b/externals/lyonpotpourri/bvplay~.c new file mode 100755 index 000000000..0f759f513 --- /dev/null +++ b/externals/lyonpotpourri/bvplay~.c @@ -0,0 +1,297 @@ +#include "MSPd.h" + +static t_class *bvplay_class; + + +#define OBJECT_NAME "bvplay~" +typedef struct { + t_word *b_samples; + long b_valid; + long b_nchans; + long b_frames; +} t_guffer; // stuff we care about from garrays and buffers + + +typedef struct _bvplay +{ + + t_object x_obj; + float x_f; + t_symbol *sfname; // name of soundfile + t_guffer *wavebuf; // store needed buffer or garray data + + long object_chans; // number of channels for a given instantiation + float taper_dur; + int R; + int framesize; + float *notedata; + int active; + float buffer_duration; + int taper_frames; + float amp; + int start_frame; + int note_frames; + int end_frame; + float increment; + float findex; + int index ; + short verbose; + short mute; +} t_bvplay; + +t_int *bvplay_perform_mono(t_int *w); +t_int *bvplay_perform_stereo(t_int *w); +void bvplay_dsp(t_bvplay *x, t_signal **sp); +void bvplay_set(t_bvplay *x, t_symbol *s); +void *bvplay_new(t_symbol *s, t_floatarg taperdur); +void bvplay_notelist(t_bvplay *x, t_symbol *msg, short argc, t_atom *argv ); +void bvplay_verbose(t_bvplay *x, t_floatarg t); +void bvplay_mute(t_bvplay *x, t_floatarg t); +void bvplay_taper(t_bvplay *x, t_floatarg t); +void bvplay_dsp_free(t_bvplay *x); + +void bvplay_tilde_setup(void) +{ + bvplay_class = class_new(gensym("bvplay~"),(t_newmethod)bvplay_new, + (t_method)bvplay_dsp_free, sizeof(t_bvplay), 0, A_SYMBOL, A_FLOAT,0); + CLASS_MAINSIGNALIN(bvplay_class,t_bvplay, x_f); + class_addmethod(bvplay_class,(t_method)bvplay_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(bvplay_class,(t_method)bvplay_notelist,gensym("list"),A_GIMME,0); + class_addmethod(bvplay_class,(t_method)bvplay_verbose,gensym("verbose"),A_FLOAT,0); + class_addmethod(bvplay_class,(t_method)bvplay_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(bvplay_class,(t_method)bvplay_taper,gensym("taper"),A_FLOAT,0); + + potpourri_announce(OBJECT_NAME); +} + +void bvplay_taper(t_bvplay *x, t_floatarg t) +{ + if(t>0){ + x->taper_dur = (float)t/1000.0; + x->taper_frames = x->R * x->taper_dur; + } +} + + +void bvplay_mute(t_bvplay *x, t_floatarg f) +{ + x->mute = (short)f; +} + +void bvplay_verbose(t_bvplay *x, t_floatarg f) +{ + x->verbose = (short)f; +} + + +void bvplay_notelist(t_bvplay *x, t_symbol *msg, short argc, t_atom *argv) +{ + + if( x->active ){ + if( x->verbose ) + error("object still playing - cannot add note!"); + return; + } + bvplay_set(x, x->sfname); + if(! x->wavebuf->b_valid){ + post("%s: no valid buffer yet",OBJECT_NAME); + return; + } + + // read note data + if( argc != 4 ){ + if( x->verbose ){ + post("improper note data"); + post("notelist parameters: skiptime, duration, increment, amplitude"); + } + } + + x->notedata[0] = atom_getfloatarg(0,argc,argv) / 1000.0; + x->notedata[1] = atom_getfloatarg(1,argc,argv) / 1000.0; + x->notedata[2] = atom_getfloatarg(2,argc,argv); + x->notedata[3] = atom_getfloatarg(3,argc,argv); + + x->start_frame = x->notedata[0] * x->R; + x->increment = x->notedata[2]; + x->index = x->findex = x->start_frame; + + if( x->increment == 0.0 ){ + if( x->verbose ) + post("zero increment!"); + return; + } + x->note_frames = x->notedata[1] * x->increment * x->R; + x->end_frame = x->start_frame + x->note_frames; + + x->amp = x->notedata[3]; + if( x->start_frame < 0 || x->start_frame >= x->wavebuf->b_frames){ + if( x->verbose ) + post("%s: bad start time",OBJECT_NAME); + return; + } + if( x->end_frame < 0 || x->end_frame >= x->wavebuf->b_frames){ + if( x->verbose ) + post("%s: bad end time",OBJECT_NAME); + return; + } + + x->active = 1; +} + +t_int *bvplay_perform_mono(t_int *w) +{ + t_bvplay *x = (t_bvplay *)(w[1]); + t_float *out = (t_float *)(w[2]); + int n = (int) w[3]; + t_word *tab; + long iindex = x->index; + float findex = x->findex; + int end_frame = x->end_frame; + float increment = x->increment; + int start_frame = x->start_frame; + int taper_frames = x->taper_frames; + float noteamp = x->amp; + float frac, amp; + /**********************/ + bvplay_set(x,x->sfname); + + if(!x->wavebuf->b_valid) { + post("invalid buffer"); + memset(out, 0, sizeof(float) * n); + return (w+4); + } + tab = x->wavebuf->b_samples; + + if(x->active){ + while(n--){ + // post("index: %d endframe %d", iindex, end_frame); + if((increment > 0 && iindex < end_frame) || (increment < 0 && iindex > end_frame)) { + // envelope + if( increment > 0 ){ + if( findex < start_frame + taper_frames ){ + amp = noteamp * ((findex - (float) start_frame) / (float) taper_frames ); + } else if ( findex > end_frame - taper_frames) { + amp = noteamp * (((float)end_frame - findex) / (float) taper_frames); + } else { + amp = noteamp; + } + } else { // negative increment case + if( findex > start_frame - taper_frames ){ + amp = noteamp * ( (start_frame - findex) / taper_frames ); + } else if ( findex < end_frame + taper_frames) { + amp = noteamp * (( findex - end_frame ) / taper_frames) ; + } else { + amp = noteamp; + } + + } + frac = findex - iindex ; + *out++ = amp * (tab[iindex].w_float + frac * (tab[iindex + 1].w_float - tab[iindex].w_float)); + findex += increment; + iindex = findex ; + } else { + *out++ = 0; + x->active = 0; + } + } + + } + else{ + while(n--){ + *out++ = 0; + } + } + + x->index = iindex; + x->findex = findex; + + return (w+4); +} + +void bvplay_set(t_bvplay *x, t_symbol *wavename) +{ + + t_garray *a; + int b_frames; + t_word *b_samples; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); + x->wavebuf->b_valid = 0; + } + else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); + x->wavebuf->b_valid = 0; + } + else { + x->wavebuf->b_valid = 1; + x->wavebuf->b_frames = b_frames; + x->wavebuf->b_nchans = 1; + x->wavebuf->b_samples = b_samples; + garray_usedindsp(a); + } + +} + + +void *bvplay_new(t_symbol *s, t_floatarg taperdur) +{ + int ichan = 1; + + t_bvplay *x = (t_bvplay *)pd_new(bvplay_class); + + outlet_new(&x->x_obj, gensym("signal")); + + + x->object_chans = ichan; + taperdur /= 1000.0; // convert to seconds + if(taperdur <= 0) + taperdur = .005; + x->sfname = s; + x->R = sys_getsr(); + if(! x->R){ + error("zero sampling rate - set to 44100"); + x->R = 44100; + } + x->notedata = (float *) calloc(4, sizeof(float)); + x->wavebuf = (t_guffer *) calloc(1, sizeof(t_guffer)); + x->taper_dur = taperdur; + x->taper_frames = x->R * x->taper_dur; + x->buffer_duration = 0.0 ; + x->framesize = 0; + x->active = 0; + x->verbose = 0; + x->mute = 0; + // post("channels %f, taper duration %.4f, taperframes %d", chan, taperdur, x->taper_frames ); + + // post("arguments: channels, taper_duration(secs.)"); + return x; +} + +void bvplay_dsp_free(t_bvplay *x) +{ + + free(x->notedata); + free(x->wavebuf); +} + +void bvplay_dsp(t_bvplay *x, t_signal **sp) +{ + bvplay_set(x,x->sfname); + + if(x->R != sp[0]->s_sr){ + x->R = sp[0]->s_sr; + x->taper_frames = x->R * x->taper_dur; + } + // Pd buffers always mono ... + dsp_add(bvplay_perform_mono, 3, x, sp[0]->s_vec, sp[0]->s_n); + /* + if( x->wavebuf->b_nchans == 1 ) { + // post("initiating mono processor"); + dsp_add(bvplay_perform_mono, 3, x, sp[0]->s_vec, sp[0]->s_n); + } else if( x->wavebuf->b_nchans == 2) { + // post("initiating stereo processor"); + dsp_add(bvplay_perform_stereo,4,x,sp[0]->s_vec,sp[1]->s_vec,sp[0]->s_n); + } else { + post("%s: bad channel spec: %d, cannot initiate dsp code",OBJECT_NAME, x->wavebuf->b_nchans); + }*/ +} diff --git a/externals/lyonpotpourri/cartopol~-help.pd b/externals/lyonpotpourri/cartopol~-help.pd new file mode 100755 index 000000000..bd46bfb1f --- /dev/null +++ b/externals/lyonpotpourri/cartopol~-help.pd @@ -0,0 +1,58 @@ +#N canvas 506 441 450 300 10; +#N canvas 91 32 532 393 basic-fft 0; +#X obj 225 66 inlet~; +#X obj 225 341 outlet~; +#X obj 225 98 windowvec~; +#X obj 225 136 rfft~, f 6; +#X obj 75 341 block~ 1024 8; +#X obj 225 171 cartopol~; +#X obj 225 215 poltocar~; +#X obj 225 245 rifft~; +#X obj 225 308 windowvec~; +#X obj 225 275 *~ 0; +#X obj 394 185 *; +#X msg 346 107 1 1024 8; +#X obj 346 138 unpack f f f; +#X obj 346 217 /; +#X floatatom 346 249 12 0 0 0 - - -, f 12; +#X text 427 250 rescale factor; +#X obj 346 76 loadbang; +#X text 28 195 Any processing would go here ->; +#X text 44 321 sets FFT size and overlap; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 5 1; +#X connect 5 0 6 0; +#X connect 5 1 6 1; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 13 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 10 0; +#X connect 12 2 10 1; +#X connect 13 0 14 0; +#X connect 14 0 9 1; +#X connect 16 0 11 0; +#X restore 22 142 pd basic-fft; +#X obj 22 115 osc~ 440; +#X obj 22 216 dac~; +#X obj 22 178 *~ 0.01; +#X floatatom 22 92 5 0 0 0 - - -, f 5; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 103 142 <- look here; +#X floatatom 93 179 5 0 0 2 gain - -, f 5; +#X text 23 36 cartopol~ converts Pd-style rfft~ frames to polar form. +This help file demonstrates the structure of Max pfft~-style FFT processing +for Pd.; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 3 0 2 1; +#X connect 4 0 1 0; +#X connect 7 0 3 1; diff --git a/externals/lyonpotpourri/cartopol~.c b/externals/lyonpotpourri/cartopol~.c new file mode 100755 index 000000000..094eb208d --- /dev/null +++ b/externals/lyonpotpourri/cartopol~.c @@ -0,0 +1,63 @@ +#include "MSPd.h" + +static t_class *cartopol_class; + +/* Pd version of cartopol~ */ + +#define OBJECT_NAME "cartopol~" +typedef struct _cartopol +{ + t_object x_obj; + t_float x_f; +} t_cartopol; + +void *cartopol_new(t_symbol *msg, short argc, t_atom *argv); +void cartopol_free(t_cartopol *x); +void cartopol_dsp(t_cartopol *x, t_signal **sp); + + +void cartopol_tilde_setup(void){ + cartopol_class = class_new(gensym("cartopol~"), (t_newmethod)cartopol_new, + 0, sizeof(t_cartopol),0,A_GIMME,0); + CLASS_MAINSIGNALIN(cartopol_class, t_cartopol, x_f); + class_addmethod(cartopol_class, (t_method)cartopol_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *cartopol_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_cartopol *x = (t_cartopol *)pd_new(cartopol_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + return x; +} + +t_int *cartopol_perform(t_int *w) +{ + int i; + t_cartopol *x = (t_cartopol *) w[1]; + t_float *real_in = (t_float *) w[2]; + t_float *imag_in = (t_float *) w[3]; + t_float *mag_out = (t_float *) w[4]; + t_float *phase_out = (t_float *) w[5]; + t_float imag, real; + + int n = (int) w[6]; // obj, func, 1 inlet + int N2 = n/2; + + for(i = 0; i < N2 + 1; i++){ + real = (i == N2 ? real_in[1] : real_in[i]); + imag = (i == 0 || i == N2 ? 0.0 : imag_in[i]); + mag_out[i] = hypot(real,imag); + phase_out[i] = -atan2(imag,real); + } + + return (w + 7); +} + +void cartopol_dsp(t_cartopol *x, t_signal **sp) +{ + dsp_add(cartopol_perform,6, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/channel~-help.pd b/externals/lyonpotpourri/channel~-help.pd new file mode 100755 index 000000000..c7c73209b --- /dev/null +++ b/externals/lyonpotpourri/channel~-help.pd @@ -0,0 +1,53 @@ +#N canvas 362 167 389 443 10; +#X floatatom 30 409 5 0 0 0 - - -, f 5; +#X obj 30 379 snapshot~; +#X msg 30 98 44100; +#X obj 30 118 / 64; +#X floatatom 30 138 5 0 0 0 - - -, f 5; +#X obj 30 210 osc~; +#X obj 30 321 sqrt~; +#X obj 30 284 *~; +#X obj 80 284 *~; +#X obj 30 348 channel~ 1; +#X msg 166 299 channel \$1; +#X floatatom 166 275 5 0 0 0 - - -, f 5; +#X obj 30 235 rfft~; +#X obj 178 363 metro 250; +#X obj 30 178 *~ 1; +#X floatatom 54 159 5 0 0 0 - - -, f 5; +#X text 101 157 harmonic to synthesize; +#X msg 166 222 2; +#X obj 30 73 loadbang; +#X text 209 273 index to monitor; +#X obj 23 6 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 178 322 loadbang; +#X msg 178 343 1; +#X obj 166 200 loadbang; +#X text 210 258 signal vector; +#X text 28 35 channel~ - utility to probe a specific position within +a signal vector. Useful for examining FFT data.; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 14 0; +#X connect 5 0 12 0; +#X connect 6 0 9 0; +#X connect 7 0 6 0; +#X connect 8 0 6 0; +#X connect 9 0 1 0; +#X connect 10 0 9 0; +#X connect 11 0 10 0; +#X connect 12 0 7 0; +#X connect 12 0 7 1; +#X connect 12 1 8 1; +#X connect 12 1 8 0; +#X connect 13 0 1 0; +#X connect 14 0 5 0; +#X connect 15 0 14 1; +#X connect 17 0 11 0; +#X connect 17 0 15 0; +#X connect 18 0 2 0; +#X connect 21 0 22 0; +#X connect 22 0 13 0; +#X connect 23 0 17 0; diff --git a/externals/lyonpotpourri/channel~.c b/externals/lyonpotpourri/channel~.c new file mode 100755 index 000000000..b281944d4 --- /dev/null +++ b/externals/lyonpotpourri/channel~.c @@ -0,0 +1,84 @@ +#include "MSPd.h" + +static t_class *channel_class; + + +typedef struct _channel +{ + + t_object x_obj; + float x_f; + void *float_outlet; + int channel; + + +} t_channel; + +#define OBJECT_NAME "channel~" + +void *channel_new(t_symbol *s, int argc, t_atom *argv); + +t_int *channel_perform(t_int *w); +void channel_dsp(t_channel *x, t_signal **sp); +void channel_channel(t_channel *x, t_floatarg chan) ; +void channel_int(t_channel *x, long chan) ; + +#define NO_FREE_FUNCTION 0 +void channel_tilde_setup(void) +{ + channel_class = class_new(gensym("channel~"), (t_newmethod)channel_new, + NO_FREE_FUNCTION,sizeof(t_channel), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(channel_class, t_channel, x_f); + class_addmethod(channel_class, (t_method)channel_dsp, gensym("dsp"), 0); + class_addmethod(channel_class,(t_method)channel_channel,gensym("channel"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void channel_channel(t_channel *x, t_floatarg chan) +{ + if(chan >= 0) + x->channel = (int) chan; +} + + +void channel_int(t_channel *x, long chan) +{ + if(chan >= 0) + x->channel = (int) chan; +} + +void *channel_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_channel *x = (t_channel *)pd_new(channel_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->channel = (int)atom_getfloatarg(0,argc,argv); + return (x); +} + +t_int *channel_perform(t_int *w) +{ + t_channel *x = (t_channel *) (w[1]); + t_float *in_vec = (t_float *)(w[2]); + t_float *out_vec = (t_float *)(w[3]); + int n = (int) w[4]; + int channel = x->channel; + float value; + + if(channel < 0 || channel > n){ + return w + 5; + } + value = in_vec[channel]; + + while( n-- ) { + *out_vec++ = value; + } + return w + 5; +} + +void channel_dsp(t_channel *x, t_signal **sp) +{ + dsp_add(channel_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/chopper~-help.pd b/externals/lyonpotpourri/chopper~-help.pd new file mode 100755 index 000000000..793c4a279 --- /dev/null +++ b/externals/lyonpotpourri/chopper~-help.pd @@ -0,0 +1,202 @@ +#N canvas 543 159 539 382 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array sound1 62079 float 2; +#X coords 0 1 62079 -1 100 70 1; +#X restore 21 88 graph; +#X obj 103 218 chopper~ sound1; +#X obj 103 295 dac~; +#N canvas 745 473 502 352 messages 0; +#N canvas 128 60 560 676 basic 0; +#X obj 49 335 outlet; +#X msg 49 106 force_new; +#X msg 128 107 lockme \$1; +#X obj 128 69 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 +; +#X floatatom 200 132 5 0 0 0 - minincr -, f 5; +#X floatatom 322 130 5 0 0 0 - maxincr -, f 5; +#X floatatom 329 228 5 0 0 0 - minseg -, f 5; +#X floatatom 432 228 5 0 0 0 - maxseg -, f 5; +#X msg 329 249 set_minseg \$1; +#X msg 432 249 set_maxseg \$1; +#X msg 322 151 set_maxincr \$1; +#X msg 200 153 set_minincr \$1; +#X obj 53 380 hsl 128 15 0.1 0.9999 0 0 minincr minincr-init minincr +-2 -6 0 8 -252672 -1 -1 5645 1; +#X obj 53 411 hsl 128 15 1.0001 10 0 0 maxincr maxincr-init maxincr +-2 -6 0 8 -252672 -1 -1 1411 1; +#N canvas 0 22 470 320 init 0; +#X obj 27 150 s minincr-init; +#X msg 27 123 0.5; +#X obj 134 149 s maxincr-init; +#X msg 134 122 2; +#X obj 27 4 loadbang; +#X obj 245 147 s minseg-init; +#X obj 352 146 s maxseg-init; +#X msg 245 120 100; +#X obj 323 91 s fixed-incr-init; +#X msg 323 64 1; +#X msg 352 119 2000; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 4 0 1 0; +#X connect 4 0 7 0; +#X connect 4 0 10 0; +#X connect 4 0 9 0; +#X connect 7 0 5 0; +#X connect 9 0 8 0; +#X connect 10 0 6 0; +#X restore 275 51 pd init; +#X obj 55 445 hsl 128 15 3 300 0 0 minseg minseg-init minseg -2 -6 +0 8 -252672 -1 -1 4148 1; +#X obj 55 476 hsl 128 15 20 2000 0 0 maxseg maxseg-init maxseg -2 -6 +0 8 -252672 -1 -1 12700 1; +#X msg 311 383 fixed_increment \$1; +#X obj 49 8 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1; +#X obj 49 52 metro 120000; +#X obj 314 350 hsl 50 10 0.1 5 0 0 empty empty empty -2 -8 0 10 -174016 +-1 -1 0 1; +#X floatatom 311 366 5 0 0 0 - - -, f 5; +#X obj 382 349 r fixed-incr-init; +#X obj 278 309 t b; +#X msg 278 330 0; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 11 0; +#X connect 5 0 10 0; +#X connect 6 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 10 0 23 0; +#X connect 11 0 0 0; +#X connect 11 0 23 0; +#X connect 17 0 0 0; +#X connect 18 0 19 0; +#X connect 19 0 1 0; +#X connect 20 0 21 0; +#X connect 21 0 17 0; +#X connect 22 0 21 0; +#X connect 23 0 24 0; +#X connect 24 0 21 0; +#X restore 53 44 pd basic controls; +#N canvas 480 42 593 551 deviations 0; +#X obj 224 188 outlet; +#X msg 224 134 rdur \$1; +#X floatatom 224 110 5 0 0 0 - rdur -, f 5; +#X obj 222 250 hsl 128 15 0 1 0 0 rdur rdur-init rdur -2 -6 0 8 -252672 +-1 -1 0 1; +#X obj 222 282 hsl 128 15 0 1 0 0 rinc rinc-init rinc -2 -6 0 8 -252672 +-1 -1 0 1; +#X floatatom 288 110 5 0 0 0 - rinc -, f 5; +#X msg 288 134 rinc \$1; +#X floatatom 356 110 5 0 0 0 - jitter -, f 5; +#X msg 356 134 jitter \$1; +#X obj 222 316 hsl 128 15 0 1 0 0 jitter jitter-init jitter -2 -6 0 +8 -252672 -1 -1 0 1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 7 0 8 0; +#X connect 8 0 0 0; +#X restore 104 82 pd deviations; +#N canvas 257 591 482 332 memory 0; +#X obj 167 217 outlet; +#X text 233 32 1024 locations available; +#X msg 142 30 store_loop 1; +#X msg 156 49 recall_loop 1; +#X msg 182 93 store_loop 2; +#X msg 195 113 recall_loop 2; +#X msg 74 87 show_loop; +#X text 208 170 use numbers that come from show_loop; +#X msg 35 144 force_new; +#X msg 281 188 set_loop 1000 25000 1.62; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X restore 88 62 pd memory; +#N canvas 0 22 490 340 refinements 0; +#X obj 38 149 outlet; +#X obj 38 29 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 +; +#X msg 38 74 adjust_inverse \$1; +#X msg 95 123 taper \$1; +#X floatatom 95 100 5 0 0 0 - taper-dur -, f 5; +#X obj 41 185 hsl 128 15 1 100 0 0 taper-dur taper-dur-init taper-dur +-2 -6 0 8 -252672 -1 -1 0 1; +#X text 78 29 maintains loop duration; +#X text 77 43 under increment change; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X restore 125 104 pd refinements; +#N canvas 0 22 462 312 system 0; +#X obj 38 138 outlet; +#X obj 38 29 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 +; +#X msg 38 74 mute \$1; +#X msg 111 105 seed 6331; +#X text 110 88 set seed (might be helpful for stereo); +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X restore 140 131 pd system; +#X obj 54 201 s chopper.demo.msgs; +#X connect 0 0 5 0; +#X connect 1 0 5 0; +#X connect 2 0 5 0; +#X connect 3 0 5 0; +#X connect 4 0 5 0; +#X restore 236 85 pd messages; +#N canvas 9 465 466 316 load-soundfile 0; +#X obj 31 177 soundfiler; +#X msg 30 103 bang; +#X obj 30 129 openpanel; +#X msg 30 151 read -resize \$1 sound1; +#X obj 11 57 loadbang; +#X obj 105 40 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 10 82 read -resize sound/voice.wav sound1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X restore 285 330 pd load-soundfile; +#X obj 103 265 *~ 0.1; +#X obj 240 116 hsl 100 14 0 0.5 0 0 empty empty empty -2 -8 0 10 -174016 +-1 -1 0 1; +#X obj 18 8 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 17 38 chopper~ - an algorithmic array chopper; +#X obj 103 195 r chopper.demo.msgs; +#X obj 291 215 chopper~ sound1; +#X obj 291 192 r chopper.demo.msgs; +#X obj 291 265 *~ 0.1; +#X obj 330 243 r chopper.demo.gain; +#X obj 142 242 r chopper.demo.gain; +#X obj 237 141 s chopper.demo.gain; +#X text 323 86 <- open this for more info; +#X text 346 118 set master gain; +#X msg 24 171 sync_out; +#X text 88 170 sync instances; +#X text 25 330 use a fairly long and varied sound here ->; +#X connect 1 0 5 0; +#X connect 5 0 2 0; +#X connect 6 0 15 0; +#X connect 9 0 1 0; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 12 0 2 1; +#X connect 13 0 12 1; +#X connect 14 0 5 1; +#X connect 18 0 1 0; diff --git a/externals/lyonpotpourri/chopper~.c b/externals/lyonpotpourri/chopper~.c new file mode 100755 index 000000000..71550cc4f --- /dev/null +++ b/externals/lyonpotpourri/chopper~.c @@ -0,0 +1,909 @@ +#include "MSPd.h" + +static t_class *chopper_class; + +#define MAXSTORE 1024 +#define OBJECT_NAME "chopper~" + +typedef struct _chopper +{ + + t_object x_obj; + float x_f; + t_symbol *l_sym; + long l_chan; + float increment; + double fbindex; + float buffer_duration; + float minseg; + float maxseg; + float segdur; + float minincr; + float maxincr; + int loop_samps; + int samps_to_go ; + int loop_start; + int bindex ; + int taper_samps; + int loop_min_samps; + int loop_max_samps; + float R; + float ldev; + float st_dev ; + int lock_loop; + int force_new_loop; + int framesize; + short mute; + short disabled; + int setup_chans; + int *stored_starts; + int *stored_samps; + float *stored_increments; + short preempt; + short loop_engaged; + short data_recalled; + short initialize_loop; + short fixed_increment_on; + float fixed_increment; + float retro_odds; + float fade_level; + int transp_loop_samps; + float taper_duration; + short lock_terminated; + int preempt_samps; + int preempt_count; + short recalling_loop; + float jitter_factor; + float rdur_factor; + float rinc_factor; + short increment_adjusts_loop ; + short loop_adjust_inverse; + long b_frames; + long b_nchans; + t_word *b_samples; +} t_chopper; + + +t_int *chopper_perform_stereo(t_int *w); +t_int *choppermono_perform(t_int *w); +t_int *chopper_perform_stereo_nointerpol(t_int *w); +t_int *chopper_perform_mono(t_int *w); +t_int *chopper_pd_perform(t_int *w); +void chopper_dsp(t_chopper *x, t_signal **sp); +void chopper_set(t_chopper *x, t_symbol *s); +void chopper_mute(t_chopper *x, t_floatarg toggle); +void chopper_increment_adjust(t_chopper *x, t_floatarg toggle); +void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle); +void *chopper_new(t_symbol *msg, short argc, t_atom *argv); +void chopper_in1(t_chopper *x, long n); +void chopper_set_minincr(t_chopper *x, t_floatarg n); +void chopper_set_maxincr(t_chopper *x, t_floatarg n); +void chopper_set_minseg(t_chopper *x, t_floatarg n); +void chopper_set_maxseg(t_chopper *x, t_floatarg n); +void chopper_taper(t_chopper *x, t_floatarg f); +void chopper_fixed_increment(t_chopper *x, t_floatarg f); +void chopper_lockme(t_chopper *x, t_floatarg n); +void chopper_force_new(t_chopper *x); +float chopper_boundrand(float min, float max); +void chopper_assist(t_chopper *x, void *b, long m, long a, char *s); +void chopper_dblclick(t_chopper *x); +void chopper_show_loop(t_chopper *x); +void chopper_set_loop(t_chopper *x, t_symbol *msg, short argc, t_atom *argv); +void chopper_randloop( t_chopper *x); +void chopper_store_loop(t_chopper *x, t_floatarg loop_bindex); +void chopper_recall_loop(t_chopper *x, t_floatarg loop_bindex); +void chopper_free(t_chopper *x) ; +void chopper_retro_odds(t_chopper *x, t_floatarg f); +void chopper_jitter(t_chopper *x, t_floatarg f); +void chopper_jitterme(t_chopper *x); +void chopper_rdur(t_chopper *x, t_floatarg f); +void chopper_rdurme(t_chopper *x); +void chopper_rinc(t_chopper *x, t_floatarg f); +void chopper_rincme(t_chopper *x); +void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle); +t_int *chopper_performtest(t_int *w); +void chopper_init(t_chopper *x, short initialized); +void chopper_seed(t_chopper *x, t_floatarg seed); +void chopper_testrand(t_chopper *x); + +t_symbol *ps_buffer; + + +void chopper_testrand(t_chopper *x) +{ + float rval = chopper_boundrand(0.0, 1.0); + post("random btwn 0.0 1.0: %f",rval); +} + +void chopper_mute(t_chopper *x, t_floatarg toggle) +{ + x->mute = (short) toggle; +} + +void chopper_seed(t_chopper *x, t_floatarg seed) +{ + srand((long)seed); +} + +void chopper_tilde_setup(void){ + chopper_class = class_new(gensym("chopper~"), (t_newmethod)chopper_new, + (t_method)chopper_free ,sizeof(t_chopper), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(chopper_class, t_chopper, x_f); + class_addmethod(chopper_class,(t_method)chopper_dsp,gensym("dsp"),0); + class_addmethod(chopper_class,(t_method)chopper_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_taper,gensym("taper"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_fixed_increment,gensym("fixed_increment"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_retro_odds,gensym("retro_odds"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_show_loop,gensym("show_loop"),0); + class_addmethod(chopper_class,(t_method)chopper_set_loop,gensym("set_loop"),A_GIMME,0); + class_addmethod(chopper_class,(t_method)chopper_store_loop,gensym("store_loop"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_recall_loop,gensym("recall_loop"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_increment_adjust,gensym("increment_adjust"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_adjust_inverse,gensym("adjust_inverse"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_jitter,gensym("jitter"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_rdur,gensym("rdur"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_rinc,gensym("rinc"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_set_minincr,gensym("set_minincr"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_set_maxincr,gensym("set_maxincr"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_set_minseg,gensym("set_minseg"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_set_maxseg,gensym("set_maxseg"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_lockme,gensym("lockme"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_force_new,gensym("force_new"),0); + class_addmethod(chopper_class,(t_method)chopper_seed,gensym("seed"),A_FLOAT,0); + class_addmethod(chopper_class,(t_method)chopper_testrand,gensym("testrand"),0); + potpourri_announce(OBJECT_NAME); +} + + +void chopper_increment_adjust(t_chopper *x, t_floatarg toggle) +{ + x->increment_adjusts_loop = (short)toggle; + +} + +void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle) +{ + x->loop_adjust_inverse = (short)toggle; +} + +void chopper_fixed_increment(t_chopper *x, t_floatarg f) +{ + float new_samps = 0; + float rectf; + + x->fixed_increment = f; + if( f ){ + x->fixed_increment_on = 1; + } else { + x->fixed_increment_on = 0; + } + + rectf = fabs(f); + + if( x->lock_loop && rectf > 0.0 ){ + + if( x->loop_adjust_inverse ){ + new_samps = (float) x->loop_samps * rectf ; + } else { + new_samps = (float) x->loop_samps / rectf ; + } + if( f > 0 ){ + if( x->loop_start + new_samps >= x->framesize ){ + return; + } else { + x->increment = x->fixed_increment; + } + } else { + if( x->loop_start - new_samps < 0) { + return; + } else { + x->increment = x->fixed_increment; + } + } + + } + + if( x->increment_adjusts_loop ){ + x->transp_loop_samps = new_samps; + } + + +} + +void chopper_jitter(t_chopper *x, t_floatarg f) +{ + f *= 0.1; // scale down a bit + if( f >= 0. && f <= 1.0 ) + x->jitter_factor = f; +} + +void chopper_rdur(t_chopper *x, t_floatarg f) +{ + + if( f >= 0. && f <= 1.0 ) + x->rdur_factor = f; +} + +void chopper_rinc(t_chopper *x, t_floatarg f) +{ + // f *= 0.1; // scale down a bit + + if( f >= 0. && f <= 1.0 ) + x->rinc_factor = f; +} + + +void chopper_retro_odds(t_chopper *x, t_floatarg f) +{ + + if( f < 0 ) + f = 0; + if( f > 1 ) + f = 1; + + x->retro_odds = f; + +} + +void chopper_show_loop(t_chopper *x) +{ + post("start: %d, samps: %d, increment: %f", x->loop_start, x->transp_loop_samps, x->increment); + post("minloop %f, maxloop %f", x->minseg, x->maxseg); +} + +void chopper_store_loop(t_chopper *x, t_floatarg f) +{ + int loop_bindex = (int) f; + + if( loop_bindex < 0 || loop_bindex >= MAXSTORE ){ + error("bindex %d out of range", loop_bindex); + return; + } + + x->stored_starts[ loop_bindex ] = x->loop_start; + x->stored_samps[ loop_bindex ] = x->transp_loop_samps; + x->stored_increments[ loop_bindex ] = x->increment; + + post("storing loop %d: %d %d %f",loop_bindex, + x->stored_starts[ loop_bindex ],x->stored_samps[ loop_bindex ], x->stored_increments[ loop_bindex ] ); + +} + +void chopper_recall_loop(t_chopper *x, t_floatarg f) +{ + // bug warning: recall preceding store will crash program + // need to add warning +int loop_bindex = (int) f; + + if( loop_bindex < 0 || loop_bindex >= MAXSTORE ){ + error("bindex %d out of range", loop_bindex); + return; + } + + if( ! x->stored_samps[ loop_bindex ] ){ + error("no loop stored at position %d!", loop_bindex); + return; + } + + + x->loop_start = x->stored_starts[ loop_bindex ]; + x->samps_to_go = x->transp_loop_samps = x->stored_samps[ loop_bindex ]; + + if( x->loop_min_samps > x->transp_loop_samps ) + x->loop_min_samps = x->transp_loop_samps ; + if( x->loop_max_samps < x->transp_loop_samps ) + x->loop_max_samps = x->transp_loop_samps ; + x->increment = x->stored_increments[ loop_bindex ]; + x->preempt_count = x->preempt_samps; + // post("preempt samps:%d", x->preempt_count); + x->recalling_loop = 1; + // x->data_recalled = 1; +} + +void chopper_set_loop(t_chopper *x, t_symbol *msg, short argc, t_atom *argv) +{ + if( argc < 3 ){ + error("format: start samples increment"); + return; + } + x->loop_start = atom_getintarg(0,argc,argv); + x->loop_samps = atom_getintarg(1,argc,argv); + x->increment = atom_getfloatarg(2,argc,argv); + x->data_recalled = 1; + + x->samps_to_go = x->loop_samps; + x->fbindex = x->bindex = x->loop_start; +// post("loop set to: st %d samps %d incr %f", x->loop_start, x->loop_samps,x->increment); +} + +void chopper_taper(t_chopper *x, t_floatarg f) +{ + f /= 1000.0; + + if( f > 0 ){ + x->taper_samps = (float) x->R * f ; + } + if( x->taper_samps < 2 ) + x->taper_samps = 2; +} + + + +void *chopper_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_chopper *x = (t_chopper *)pd_new(chopper_class); + outlet_new(&x->x_obj, gensym("signal")); + x->R = sys_getsr(); + x->l_sym = atom_getsymbolarg(0,argc,argv); + chopper_init(x,0); + return (x); +} + + +void chopper_init(t_chopper *x, short initialized) +{ + if(!initialized){ + + srand(time(0)); + + if(!x->R) { + error("zero sampling rate - set to 44100"); + x->R = 44100; + } + x->minseg = 0.1; + x->maxseg = 0.8 ; + x->minincr = 0.5 ; + x->maxincr = 2.0 ; + x->data_recalled = 0; + x->segdur = 0; + x->bindex = 0 ; + x->taper_duration /= 1000.0; + if( x->taper_duration < .0001 || x->taper_duration > 10.0 ) + x->taper_duration = .0001; + x->increment_adjusts_loop = 0; + x->taper_samps = x->R * x->taper_duration; + if(x->taper_samps < 2) + x->taper_samps = 2; + + x->preempt_samps = 5; + x->loop_adjust_inverse = 0; + x->preempt = 1; + x->recalling_loop = 0; + x->ldev = 0; + x->lock_loop = 0; + x->buffer_duration = 0.0 ; + x->st_dev = 0.0; + x->framesize = 0; + x->force_new_loop = 0; + x->mute = 0; + x->disabled = 1; + x->initialize_loop = 1; + x->loop_engaged = 0; + x->fixed_increment_on = 0; + x->retro_odds = 0.5; + x->fade_level = 1.0; + x->lock_terminated = 0; + + x->stored_starts = calloc(MAXSTORE, sizeof(int)); + x->stored_samps = calloc(MAXSTORE, sizeof(int)); + x->stored_increments = calloc(MAXSTORE, sizeof(int)); + + } else { + x->taper_samps = x->R * x->taper_duration; + if(x->taper_samps < 2) + x->taper_samps = 2; + } +} + +void chopper_free(t_chopper *x) +{ + free(x->stored_increments); + free(x->stored_samps); + free(x->stored_starts); +} + +void chopper_jitterme(t_chopper *x) +{ + float new_start; + float jitter_factor = x->jitter_factor; + new_start = (1.0 + chopper_boundrand(-jitter_factor, jitter_factor) ) * (float) x->loop_start ; + + if( new_start < 0 ){ +// error("jitter loop %d out of range", new_start); + new_start = 0; + + } + else if( new_start + x->transp_loop_samps >= x->framesize ){ +// error("jitter loop %d out of range", new_start); + new_start = x->framesize - x->transp_loop_samps ; + } + if( new_start >= 0 ) + x->loop_start = new_start; +} + +void chopper_rdurme(t_chopper *x) +{ + float new_dur; + float rdur_factor = x->rdur_factor; + + new_dur = (1.0 + chopper_boundrand( -rdur_factor, rdur_factor)) * (float) x->transp_loop_samps; + if( new_dur > x->loop_max_samps ) + new_dur = x->loop_max_samps; + if( new_dur < x->loop_min_samps ) + new_dur = x->loop_min_samps; + + x->transp_loop_samps = new_dur; +} + +void chopper_rincme(t_chopper *x ) +{ + float new_inc = 0; +// int count = 0; + int new_samps; + float rinc_factor = x->rinc_factor; + + /* test generate a new increment */ + new_inc = (1.0 + chopper_boundrand( 0.0, rinc_factor)) ; + if( chopper_boundrand(0.0,1.0) > 0.5 ){ + new_inc = 1.0 / new_inc; + } + + // test for transgression + +// post("increment adjust:%d",x->increment_adjusts_loop); + + if( fabs(new_inc * x->increment) < x->minincr ) { + new_inc = x->minincr / fabs(x->increment) ; // now when we multiply - increment is set to minincr + } + else if ( fabs(new_inc * x->increment) > x->maxincr ){ + new_inc = x->maxincr / fabs(x->increment) ; // now when we multiply - increment is set to maxincr + } + + if(x->increment_adjusts_loop){ + new_samps = (float) x->transp_loop_samps / new_inc ; + } else { + new_samps = x->transp_loop_samps; + } + + new_inc *= x->increment ; + if( x->increment > 0 ){ + if( x->loop_start + new_samps >= x->framesize ){ + new_samps = (x->framesize - 1) - x->loop_start ; + } + } else { + if( x->loop_start - new_samps < 0) { + new_samps = x->loop_start + 1; + } + } + x->transp_loop_samps = new_samps; + x->increment = new_inc; +} + +void chopper_randloop( t_chopper *x ) +{ + int framesize = x->b_frames;//test +// long bindex = x->fbindex; + float segdur = x->segdur; + int loop_start = x->loop_start; + int loop_samps = x->loop_samps; + int transp_loop_samps = x->transp_loop_samps; + int samps_to_go = x->samps_to_go; + float increment = x->increment; +// int taper_samps = x->taper_samps ; +// float taper_duration = x->taper_duration; + float minincr = x->minincr; + float maxincr = x->maxincr; + float minseg = x->minseg; + float maxseg = x->maxseg; + float buffer_duration = x->buffer_duration; + float R = x->R; + float fixed_increment = x->fixed_increment; + + short fixed_increment_on = x->fixed_increment_on; + float retro_odds = x->retro_odds; + + if(fixed_increment_on){ + increment = fixed_increment; + } else { + increment = chopper_boundrand(minincr,maxincr); + } + segdur = chopper_boundrand( minseg, maxseg ); + loop_samps = segdur * R * increment; // total samples in segment +// post("rand: segdur %f R %f increment %f lsamps %d",segdur,R,increment,loop_samps); + transp_loop_samps = segdur * R ; // actual count of samples to play back + samps_to_go = transp_loop_samps; + if( loop_samps >= framesize ){ + loop_samps = framesize - 1; + loop_start = 0; + } else { +// post("rand: bufdur %f segdur %f",buffer_duration, segdur); + loop_start = R * chopper_boundrand( 0.0, buffer_duration - segdur ); + if( loop_start + loop_samps >= framesize ){ + loop_start = framesize - loop_samps; + if( loop_start < 0 ){ + loop_start = 0; + error("negative starttime"); + } + } + } + if( chopper_boundrand(0.0,1.0) < retro_odds ){ + increment *= -1.0 ; + loop_start += (loop_samps - 1); + } + +// post("randset: lstart %d lsamps %d incr %f segdur %f",loop_start,loop_samps,increment,segdur); + x->samps_to_go = samps_to_go; + x->fbindex = x->bindex = loop_start; + x->loop_start = loop_start; + x->loop_samps = loop_samps; + x->transp_loop_samps = transp_loop_samps; + x->increment = increment; + x->segdur = segdur; +} + +t_int *chopper_pd_perform(t_int *w) +{ + int bindex, bindex2; + float sample1, m1, m2; + t_chopper *x = (t_chopper *)(w[1]); + t_float *out1 = (t_float *)(w[2]); + int n = (int) w[3]; + + + /*********************************************/ + t_word *tab = x->b_samples; + long b_frames = x->b_frames; + long nc = x->b_nchans; + float segdur = x->segdur; + int taper_samps = x->taper_samps ; + float taper_duration = x->taper_duration; + float minseg = x->minseg; + float maxseg = x->maxseg; + int lock_loop = x->lock_loop; + int force_new_loop = x->force_new_loop; + float R = x->R; + short initialize_loop = x->initialize_loop; + float fade_level = x->fade_level; + short preempt = x->preempt; + int preempt_count = x->preempt_count; + int preempt_samps = x->preempt_samps; + short recalling_loop = x->recalling_loop; + float preempt_gain; + float jitter_factor = x->jitter_factor; + float rdur_factor = x->rdur_factor; + float rinc_factor = x->rinc_factor; + + if(x->mute){ + while(n--) { *out1++ = 0.0; } + return (w+4); + } + + /* SAFETY CHECKS */ + if( b_frames <= 0 || nc != 1) { + x->disabled = 1; + } + + if(x->mute || x->disabled){ + while(n--){ + *out1++ = 0.0; + } + return (w+4); + } + + if(x->framesize != b_frames) { + x->framesize = b_frames ; + x->buffer_duration = (float) b_frames / R ; + initialize_loop = 1; + } + else if(x->buffer_duration <= 0.0) { /* THIS WILL HAPPEN THE FIRST TIME */ + x->framesize = b_frames ; + x->buffer_duration = (float) b_frames / R ; + initialize_loop = 1; +// post("initializing from perform method"); + } + if(maxseg > x->buffer_duration){ + maxseg = x->buffer_duration ; + } + + if(minseg < 2. * taper_duration) + minseg = taper_duration; + + /* SET INITIAL SEGMENT */ + + bindex = x->fbindex; + + if(initialize_loop){ /* FIRST TIME ONLY */ + chopper_randloop(x); + bindex = x->fbindex; + initialize_loop = 0; + } + + while(n--){ + if( lock_loop ) { + if ( recalling_loop ) { + bindex = x->fbindex ; + x->fbindex += x->increment; + --preempt_count; + preempt_gain = fade_level * ((float) preempt_count / (float) preempt_samps); + *out1++ = tab[bindex].w_float * preempt_gain; + if( preempt_count <= 0) { + bindex = x->fbindex = x->loop_start; + recalling_loop = 0; + } + } + + else if(force_new_loop){ + + if( bindex < 0 || bindex >= b_frames ){ + x->fbindex = bindex = b_frames/2; // start in the middle + } + // should switch to < + if( preempt && preempt_samps > x->samps_to_go ){ /* PREEMPT FADE */ + + --preempt_count; + preempt_gain = fade_level * ( (float) preempt_count / (float) preempt_samps ); + bindex = x->fbindex ; + x->fbindex += x->increment; + + + *out1++ = tab[ bindex ].w_float * preempt_gain; + if(! preempt_count) { + chopper_randloop(x); + bindex = x->fbindex; + force_new_loop = 0; + } + } + else { + /* IMMEDIATE FORCE NEW LOOP AFTER PREEMPT FADE */ + chopper_randloop(x); + + force_new_loop = 0; + bindex = x->fbindex ; + bindex2 = bindex << 1; + x->fbindex += x->increment; + + --(x->samps_to_go); + if( x->samps_to_go <= 0 ){ + x->fbindex = x->loop_start; + bindex = x->fbindex; + x->samps_to_go = x->transp_loop_samps; + } + if( x->samps_to_go > x->transp_loop_samps - taper_samps ){ + fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; + *out1++ = tab[bindex].w_float * fade_level; + } else if( x->samps_to_go < taper_samps ) { + fade_level = (float)(x->samps_to_go)/(float)taper_samps; + *out1++ = tab[bindex].w_float * fade_level; + } else { + fade_level = 1.0; + *out1++ = tab[bindex].w_float; + } + } + + } + /* REGULAR PLAYBACK */ + else { + + if( bindex < 0 || bindex >= b_frames ){ + error("lock_loop: bindex %d is out of range", bindex); + x->fbindex = bindex = b_frames / 2; + } + bindex = floor( (double) x->fbindex ); + m2 = x->fbindex - bindex ; + m1 = 1.0 - m2; + + // bindex2 = bindex << 1; + x->fbindex += x->increment; + + --(x->samps_to_go); + if( x->samps_to_go <= 0 ){ + if( rdur_factor ){ + chopper_rdurme( x ); + } + if( jitter_factor ){ + chopper_jitterme( x ); + } + if( rinc_factor ) { + chopper_rincme( x ); + } + x->fbindex = x->loop_start; + // x->fbindex -= x->transp_loop_samps; + bindex = x->fbindex; + x->samps_to_go = x->transp_loop_samps; + } + + if( bindex >= b_frames ){ + sample1 = tab[bindex].w_float; + } else { + sample1 = m1 * tab[bindex].w_float + m2 * tab[bindex + 1].w_float; + } + if( x->samps_to_go > x->transp_loop_samps - taper_samps ){ + fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; + *out1++ = sample1 * fade_level; + } + else if( x->samps_to_go < taper_samps ) { + fade_level = (float)(x->samps_to_go)/(float)taper_samps; + *out1++ = sample1 * fade_level; + } + else { + fade_level = 1.0; + *out1++ = sample1; + } + } + } /* END OF LOCK LOOP */ + /* RECALL STORED LOOP */ + + else if (recalling_loop) { + bindex = x->fbindex ; + x->fbindex += x->increment; + --preempt_count; + preempt_gain = fade_level * ( (float) preempt_count / (float) preempt_samps ); + + *out1++ = tab[bindex].w_float * preempt_gain; + if( preempt_count <= 0) { + x->fbindex = x->loop_start; + bindex = x->fbindex; + recalling_loop = 0; + } + } + + else { + if( force_new_loop ){ + /* FORCE LOOP CODE : MUST PREEMPT */ + force_new_loop = 0; + /* NEED CODE HERE*/ + } + else { /* NORMAL OPERATION */ + fade_level = 1.0; /* default level */ + + if( bindex < 0 || bindex >= b_frames ){ + error("force loop: bindex %d is out of range", bindex); + post("frames:%d start:%d, samps2go:%d, tloopsamps:%d, increment:%f", + x->framesize, bindex, x->samps_to_go, x->transp_loop_samps, x->increment); + chopper_randloop(x); + bindex = x->fbindex; + } + bindex = x->fbindex ; + x->fbindex += x->increment; + + if( x->samps_to_go > x->transp_loop_samps - taper_samps ){ + fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; + *out1++ = tab[bindex].w_float * fade_level; + } + else if(x->samps_to_go < taper_samps) { + fade_level = (float)(x->samps_to_go)/(float)taper_samps; + *out1++ = tab[bindex].w_float * fade_level; + } + else { + fade_level = 1.0; + *out1++ = tab[bindex].w_float; + } + --(x->samps_to_go); + if( x->samps_to_go <= 0 ){ + chopper_randloop( x ); + bindex = x->fbindex; + } + } + } + } + + x->recalling_loop = recalling_loop; + x->fade_level = fade_level; + x->initialize_loop = initialize_loop; + x->maxseg = maxseg; + x->minseg = minseg; + x->segdur = segdur; + x->force_new_loop = force_new_loop; + return (w+4); + +} + +void chopper_force_new(t_chopper *x) +{ + x->preempt_count = x->preempt_samps; + x->force_new_loop = 1; + +} + +void chopper_lockme(t_chopper *x, t_floatarg n) +{ + x->lock_loop = (short) n; +// post("lock loop set to %d from %f",x->lock_loop,n); +} + +//set min time for loop +void chopper_set_minincr(t_chopper *x, t_floatarg n) +{ +// post("set minincr to %f", n); + + if( n < .005 ){ + n = .005; + } + //x->minincr = n ; +} + +// set deviation factor +void chopper_set_maxseg(t_chopper *x, t_floatarg n) +{ + + n /= 1000.0 ; // convert to seconds + if( n > 120. ) + n = 120.; + //post("set maxseg to %f", n); + x->maxseg = n; + x->loop_max_samps = x->maxseg * x->R; +} + +void chopper_set_minseg(t_chopper *x, t_floatarg n) +{ + + n /= 1000.0 ; // convert to seconds + + if( n < 0.03 ) + n = 0.03; + //post("set minseg to %f", n); + x->minseg = n; + x->loop_min_samps = x->minseg * x->R; +} + +// set max time for loop +void chopper_set_maxincr(t_chopper *x, t_floatarg n) +{ + if( n > 4 ){ + n = 4; + } + //post("set maxincr to %f", n); + x->maxincr = n ; +} + + + +void chopper_set(t_chopper *x, t_symbol *wavename) +{ + int frames; + t_garray *a; + x->disabled = 0; + + x->b_frames = 0; + x->b_nchans = 1; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "chopper~: %s: no such array", + wavename->s_name); + x->b_samples = 0; + x->disabled = 1; + } + else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { + pd_error(x, "%s: bad template for chopper~", wavename->s_name); + x->b_samples = 0; + x->disabled = 1; + } + else { + x->b_frames = frames; +// post("%d frames in buffer",x->b_frames); + garray_usedindsp(a); + } +} + + + +void chopper_dsp(t_chopper *x, t_signal **sp) +{ + chopper_set(x,x->l_sym); + if(x->R != sp[0]->s_sr){ + x->R = sp[0]->s_sr; + chopper_init(x,1); + } + if(x->disabled){ + return; + } + + dsp_add(chopper_pd_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); + +} + + +float chopper_boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/(float)RAND_MAX); + +} diff --git a/externals/lyonpotpourri/clean_selector~-help.pd b/externals/lyonpotpourri/clean_selector~-help.pd new file mode 100755 index 000000000..b076686a8 --- /dev/null +++ b/externals/lyonpotpourri/clean_selector~-help.pd @@ -0,0 +1,42 @@ +#N canvas 601 262 479 367 10; +#X msg 123 146 channel \$1; +#X floatatom 123 116 5 0 0 0 - - -, f 5; +#X obj 138 182 osc~ 440; +#X obj 202 183 osc~ 777; +#X obj 267 183 noise~; +#X obj 316 183 osc~ 899; +#X obj 123 307 dac~; +#X obj 123 269 *~ 0.02; +#X msg 29 143 fadetime \$1; +#X msg 29 115 20; +#X msg 155 81 1; +#X msg 189 81 2; +#X msg 221 82 3; +#X text 253 82 select channel; +#X text 25 95 set fadetime; +#X msg 74 115 1000; +#X msg 123 82 0; +#X obj 123 224 clean_selector~ 4 250; +#X text 278 223 args: inputs \, fadetime; +#X obj 23 16 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 22 52 clean_selector~ - Cross fade between multiple sources +; +#X floatatom 198 273 5 0 0 2 gain - -, f 5; +#X connect 0 0 17 0; +#X connect 1 0 0 0; +#X connect 2 0 17 0; +#X connect 3 0 17 1; +#X connect 4 0 17 2; +#X connect 5 0 17 3; +#X connect 7 0 6 0; +#X connect 7 0 6 1; +#X connect 8 0 17 0; +#X connect 9 0 8 0; +#X connect 10 0 1 0; +#X connect 11 0 1 0; +#X connect 12 0 1 0; +#X connect 15 0 8 0; +#X connect 16 0 1 0; +#X connect 17 0 7 0; +#X connect 21 0 7 1; diff --git a/externals/lyonpotpourri/clean_selector~.c b/externals/lyonpotpourri/clean_selector~.c new file mode 100755 index 000000000..8ca0a9ddb --- /dev/null +++ b/externals/lyonpotpourri/clean_selector~.c @@ -0,0 +1,241 @@ +#include "MSPd.h" +#define MAX_CHANS (64) +#define CS_LINEAR (0) +#define CS_POWER (1) + + +static t_class *clean_selector_class; + +typedef struct _clean_selector +{ + + t_object x_obj; + float x_f; + // Variables Here + short input_chans; + short active_chan; + short last_chan; + int samps_to_fade; + int fadesamps; + float fadetime; + float pi_over_two; + short fadetype; + short *connected_list; + float **bulk ; // array to point to all input audio channels + float sr; + float vs; + int inlet_count; +} t_clean_selector; + +#define OBJECT_NAME "clean_selector~" + +void *clean_selector_new(t_symbol *s, int argc, t_atom *argv); + +t_int *clean_selector_perform(t_int *w); +void clean_selector_dsp(t_clean_selector *x, t_signal **sp); +void clean_selector_float(t_clean_selector *x, t_float f); +void clean_selector_fadetime(t_clean_selector *x, t_floatarg f); +void clean_selector_int(t_clean_selector *x, t_int i); +void clean_selector_channel(t_clean_selector *x, t_floatarg i); +void clean_selector_dsp_free(t_clean_selector *x); + + + +void clean_selector_tilde_setup(void) { + clean_selector_class = class_new(gensym("clean_selector~"), (t_newmethod)clean_selector_new, + (t_method)clean_selector_dsp_free,sizeof(t_clean_selector), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(clean_selector_class, t_clean_selector, x_f); + class_addmethod(clean_selector_class,(t_method)clean_selector_dsp,gensym("dsp"),0); + class_addmethod(clean_selector_class,(t_method)clean_selector_fadetime,gensym("fadetime"),A_FLOAT,0); + class_addmethod(clean_selector_class,(t_method)clean_selector_channel,gensym("channel"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + + + +void *clean_selector_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_clean_selector *x; + x = (t_clean_selector *)pd_new(clean_selector_class); + x->fadetime = 0.05; + x->inlet_count = 8; + if(argc >= 1){ + x->inlet_count = (int)atom_getfloatarg(0,argc,argv); + if(x->inlet_count < 2 || x->inlet_count > MAX_CHANS){ + error("%s: %d is illegal number of inlets",OBJECT_NAME,x->inlet_count); + return (void *) NULL; + } + + } + if(argc >= 2){ + x->fadetime = atom_getfloatarg(1,argc,argv) / 1000.0; + } + + // post("argc %d inlet count %d fadetime %f",argc, x->inlet_count, x->fadetime); + + for(i=0; i< x->inlet_count - 1; i++){// create 16 inlets in total + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal")); + + + x->sr = sys_getsr(); + if(!x->sr){ + x->sr = 44100.0; + error("zero sampling rate - set to 44100"); + } + x->fadetype = CS_POWER; + x->pi_over_two = 1.57079632679; + + + + if(x->fadetime <= 0.0) + x->fadetime = .05; + x->fadesamps = x->fadetime * x->sr; + + x->connected_list = (short *) t_getbytes(MAX_CHANS * sizeof(short)); + for(i=0;i<16;i++){ + x->connected_list[i] = 0; + } + x->active_chan = x->last_chan = 0; + x->bulk = (t_float **) t_getbytes(16 * sizeof(t_float *)); + x->samps_to_fade = 0; + return (x); +} + +void clean_selector_dsp_free(t_clean_selector *x) +{ + t_freebytes(x->bulk, 16 * sizeof(t_float *)); +} + + +void clean_selector_fadetime(t_clean_selector *x, t_floatarg f) +{ + float fades = (float)f / 1000.0; + + if( fades < .0001 || fades > 1000.0 ){ + error("fade time is constrained to 0.1 - 1000000, but you wanted %f",f ); + return; + } + x->fadetime = fades; + x->fadesamps = x->sr * x->fadetime; + x->samps_to_fade = 0; +} + +t_int *clean_selector_perform(t_int *w) +{ + + t_clean_selector *x = (t_clean_selector *) (w[1]); + int i; + int n; + t_float *out; + + int fadesamps = x->fadesamps; + short active_chan = x->active_chan; + short last_chan = x->last_chan; + int samps_to_fade = x->samps_to_fade; + float m1, m2; + float **bulk = x->bulk; + float pi_over_two = x->pi_over_two; + short fadetype = x->fadetype; + float phase; + int inlet_count = x->inlet_count; + + for ( i = 0; i < inlet_count; i++ ) { + bulk[i] = (t_float *)(w[2 + i]); + } + out = (t_float *)(w[inlet_count + 2]); + n = (int) w[inlet_count + 3]; + + /********************************************/ + if ( active_chan >= 0 ) { + while( n-- ) { + if ( samps_to_fade >= 0 ) { + if( fadetype == CS_POWER ){ + phase = pi_over_two * (1.0 - (samps_to_fade / (float) fadesamps)) ; + m1 = sin( phase ); + m2 = cos( phase ); + --samps_to_fade; + *out++ = (*(bulk[active_chan])++ * m1) + (*(bulk[last_chan])++ * m2); + } + } + else { + *out++ = *(bulk[active_chan])++; + } + } + } + else { + while( n-- ) { + *out++ = 0.0; + } + } + + x->samps_to_fade = samps_to_fade; + return (w + (inlet_count + 4)); +} + +void clean_selector_dsp(t_clean_selector *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count; + + pointer_count = x->inlet_count + 3; // all inlets, 1 outlet, object pointer and vec-samps + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + x->fadesamps = x->fadetime * x->sr; + x->samps_to_fade = 0; + } + + + dsp_addv(clean_selector_perform, pointer_count, (t_int *) sigvec); + free(sigvec); + + for (i = 0; i < MAX_CHANS; i++) { + x->connected_list[i] = 1; + } + + + +} + + +void clean_selector_channel(t_clean_selector *x, t_floatarg i) // Look at int at inlets +{ + int chan = i; + if(chan < 0 || chan > x->inlet_count - 1){ + post("%s: channel %d out of range",OBJECT_NAME, chan); + return; + } + if(chan != x->active_chan) { + + x->last_chan = x->active_chan; + x->active_chan = chan; + x->samps_to_fade = x->fadesamps; + if( x->active_chan < 0) + x->active_chan = 0; + if( x->active_chan > MAX_CHANS - 1) { + x->active_chan = MAX_CHANS - 1; + } + if(! x->connected_list[chan]) { + // do it anyway - it's user-stupidity + /* + post("warning: channel %d not connected",chan); + x->active_chan = 1; */ + } + // post("last: %d active %d", x->last_chan, x->active_chan); + } +} diff --git a/externals/lyonpotpourri/click2bang~-help.pd b/externals/lyonpotpourri/click2bang~-help.pd new file mode 100755 index 000000000..ea965ff54 --- /dev/null +++ b/externals/lyonpotpourri/click2bang~-help.pd @@ -0,0 +1,10 @@ +#N canvas 514 317 333 242 10; +#X obj 30 90 samm~ 60 1; +#X obj 30 125 click2bang~; +#X obj 30 162 bng 40 100 50 0 empty empty empty 17 7 0 10 -216994 -1 +-1; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 24 45 click2bang~ - Convert click trigger to a bang; +#X connect 0 0 1 0; +#X connect 1 0 2 0; diff --git a/externals/lyonpotpourri/click2bang~.c b/externals/lyonpotpourri/click2bang~.c new file mode 100755 index 000000000..a95a6e995 --- /dev/null +++ b/externals/lyonpotpourri/click2bang~.c @@ -0,0 +1,64 @@ +#include "MSPd.h" + +#define OBJECT_NAME "click2bang~" + +static t_class *click2bang_class; + +typedef struct _click2bang +{ + t_object x_obj; + float x_f; + void *bang; + void *clock; +} t_click2bang; + +void *click2bang_new(void); + +t_int *click2bang_perform(t_int *w); +void click2bang_dsp(t_click2bang *x, t_signal **sp); +void click2bang_tick(t_click2bang *x) ; + +void click2bang_tilde_setup(void) +{ + click2bang_class = class_new(gensym("click2bang~"), (t_newmethod)click2bang_new, + NO_FREE_FUNCTION,sizeof(t_click2bang), 0,0); + CLASS_MAINSIGNALIN(click2bang_class, t_click2bang, x_f); + class_addmethod(click2bang_class, (t_method)click2bang_dsp, gensym("dsp"), 0); + potpourri_announce(OBJECT_NAME); +} + + +void click2bang_tick(t_click2bang *x) +{ + outlet_bang(x->bang); +} + + + +void *click2bang_new(void) +{ + + t_click2bang *x = (t_click2bang *)pd_new(click2bang_class); + x->bang = outlet_new(&x->x_obj, gensym("bang")); + x->clock = clock_new(x,(void *)click2bang_tick); + return x; +} + +t_int *click2bang_perform(t_int *w) +{ + t_click2bang *x = (t_click2bang *) (w[1]); + t_float *in_vec = (t_float *)(w[2]); + int n = (int) w[3]; + + while( n-- ) { + if(*in_vec++) + clock_delay(x->clock, 0); + } + return (w+4); +} + +void click2bang_dsp(t_click2bang *x, t_signal **sp) +{ + dsp_add(click2bang_perform, 3, x, sp[0]->s_vec,sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/click2float~-help.pd b/externals/lyonpotpourri/click2float~-help.pd new file mode 100755 index 000000000..5f365c56b --- /dev/null +++ b/externals/lyonpotpourri/click2float~-help.pd @@ -0,0 +1,11 @@ +#N canvas 719 335 316 238 10; +#X floatatom 34 177 5 0 0 0 - - -, f 5; +#X obj 34 77 samm~ 120 1; +#X obj 34 143 click2float~; +#X obj 34 109 mask~ 2 4 6.333 8; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 21 47 click2float~ - Convert a click to a float; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; diff --git a/externals/lyonpotpourri/click2float~.c b/externals/lyonpotpourri/click2float~.c new file mode 100755 index 000000000..f5671cdd6 --- /dev/null +++ b/externals/lyonpotpourri/click2float~.c @@ -0,0 +1,68 @@ +#include "MSPd.h" + + +static t_class *click2float_class; + + +typedef struct _click2float +{ + + t_object x_obj; + float x_f; + void *float_outlet; + void *clock; + double float_value; +} t_click2float; + +#define OBJECT_NAME "click2float~" + +void *click2float_new(void); +t_int *click2float_perform(t_int *w); +void click2float_dsp(t_click2float *x, t_signal **sp); +void click2float_tick(t_click2float *x) ; + + +void click2float_tilde_setup(void) +{ + click2float_class = class_new(gensym("click2float~"), (t_newmethod)click2float_new, NO_FREE_FUNCTION,sizeof(t_click2float), 0,0); + CLASS_MAINSIGNALIN(click2float_class, t_click2float, x_f); + class_addmethod(click2float_class, (t_method)click2float_dsp, gensym("dsp"), 0); + potpourri_announce(OBJECT_NAME); +} + +void click2float_tick(t_click2float *x) +{ + outlet_float(x->float_outlet,x->float_value); +} + + +void *click2float_new(void) +{ + + t_click2float *x = (t_click2float *)pd_new(click2float_class); + x->float_outlet = outlet_new(&x->x_obj, gensym("float")); + x->clock = clock_new(x,(void *)click2float_tick); + return x; +} + +t_int *click2float_perform(t_int *w) +{ + t_click2float *x = (t_click2float *) (w[1]); + t_float *in_vec = (t_float *)(w[2]); + int n = (int) w[3]; + + while( n-- ) { + if(*in_vec){ + x->float_value = *in_vec; + clock_delay(x->clock, 0); + } + *in_vec++; + } + return (w+4); +} + +void click2float_dsp(t_click2float *x, t_signal **sp) +{ + dsp_add(click2float_perform, 3, x, sp[0]->s_vec,sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/clickhold~-help.pd b/externals/lyonpotpourri/clickhold~-help.pd new file mode 100755 index 000000000..74c5e5d5e --- /dev/null +++ b/externals/lyonpotpourri/clickhold~-help.pd @@ -0,0 +1,16 @@ +#N canvas 643 117 374 266 10; +#X obj 38 74 samm~ 120 1; +#X obj 38 103 mask~ 440 550 660 880; +#X obj 38 155 osc~; +#X obj 38 132 clickhold~; +#X obj 38 215 dac~; +#X obj 38 184 *~ 0.025; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 23 48 clickhold~ - convert click to sustained signal; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 5 0 4 0; +#X connect 5 0 4 1; diff --git a/externals/lyonpotpourri/clickhold~.c b/externals/lyonpotpourri/clickhold~.c new file mode 100755 index 000000000..279dac573 --- /dev/null +++ b/externals/lyonpotpourri/clickhold~.c @@ -0,0 +1,61 @@ +#include "MSPd.h" + +static t_class *clickhold_class; + +#define OBJECT_NAME "clickhold~" + +typedef struct _clickhold +{ + t_object x_obj; + float x_f; + float hold_value; +} t_clickhold; + +void *clickhold_new(void); +t_int *clickhold_perform(t_int *w); +void clickhold_dsp(t_clickhold *x, t_signal **sp); + + +void clickhold_tilde_setup(void) +{ + clickhold_class = class_new(gensym("clickhold~"), (t_newmethod)clickhold_new, + NO_FREE_FUNCTION,sizeof(t_clickhold), 0,0); + CLASS_MAINSIGNALIN(clickhold_class, t_clickhold, x_f); + class_addmethod(clickhold_class, (t_method)clickhold_dsp, gensym("dsp"), 0); + potpourri_announce(OBJECT_NAME); +} + +void *clickhold_new(void) +{ + t_clickhold *x = (t_clickhold *)pd_new(clickhold_class); + outlet_new(&x->x_obj, gensym("signal")); + x->hold_value = 0; + return x; +} + +t_int *clickhold_perform(t_int *w) +{ + t_clickhold *x = (t_clickhold *) (w[1]); + t_float *in_vec = (t_float *)(w[2]); + t_float *out_vec = (t_float *)(w[3]); + int n = (int) w[4]; + + float hold_value = x->hold_value; + + while( n-- ) { + if(*in_vec){ + hold_value = *in_vec; + } + *in_vec++; + *out_vec++ = hold_value; + + } + x->hold_value = hold_value; + return (w+5); +} + +void clickhold_dsp(t_clickhold *x, t_signal **sp) +{ + dsp_add(clickhold_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/click~-help.pd b/externals/lyonpotpourri/click~-help.pd new file mode 100755 index 000000000..00b1125ba --- /dev/null +++ b/externals/lyonpotpourri/click~-help.pd @@ -0,0 +1,26 @@ +#N canvas 780 485 450 300 10; +#X obj 69 187 click~; +#N canvas 0 22 450 300 (subpatch) 0; +#X array click-array 8 float 2; +#X coords 0 1 8 -1 140 70 1; +#X restore 218 100 graph; +#X obj 69 249 tabwrite~ click-array; +#X obj 34 104 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 92 220 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X text 52 104 record click; +#X msg 69 156 set 0.333; +#X text 112 221 clear array; +#X msg 145 155 set 1; +#X text 25 44 click~ - convert a bang into a click. the default value +is 1 but the click can be set to any value except zero.; +#X text 66 137 set click value; +#X connect 0 0 2 0; +#X connect 3 0 0 0; +#X connect 3 0 2 0; +#X connect 5 0 2 0; +#X connect 7 0 0 0; +#X connect 9 0 0 0; diff --git a/externals/lyonpotpourri/click~.c b/externals/lyonpotpourri/click~.c new file mode 100755 index 000000000..bea1af97e --- /dev/null +++ b/externals/lyonpotpourri/click~.c @@ -0,0 +1,78 @@ +#include "MSPd.h" + +static t_class *click_class; + +typedef struct _click +{ + t_object x_obj; + float x_f; + void *float_outlet; + float float_value; + long status; +} t_click; + +#define OBJECT_NAME "click~" + +void *click_new(t_symbol *s, int argc, t_atom *argv); +void click_bang(t_click *x); +t_int *click_perform(t_int *w); +void click_dsp(t_click *x, t_signal **sp); +void click_set(t_click *x, t_floatarg f); + +#define NO_FREE_FUNCTION 0 +void click_tilde_setup(void) +{ + click_class = class_new(gensym("click~"), (t_newmethod)click_new, + NO_FREE_FUNCTION,sizeof(t_click), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(click_class, t_click, x_f); + class_addmethod(click_class, (t_method)click_dsp, gensym("dsp"), 0); + class_addmethod(click_class, (t_method)click_bang, gensym("bang"), 0); + class_addmethod(click_class, (t_method)click_set, gensym("set"), A_FLOAT, 0); + potpourri_announce(OBJECT_NAME); +} + +void click_bang(t_click *x) +{ + x->status = 1; +} + +void click_set(t_click *x, t_floatarg f) +{ + x->float_value = f; +} + +void *click_new(t_symbol *s, int argc, t_atom *argv) +{ + t_click *x = (t_click *)pd_new(click_class); + x->float_outlet = outlet_new(&x->x_obj, gensym("signal")); + x->float_value = 1.0; + x->status = 0; + return x; +} + +t_int *click_perform(t_int *w) +{ + t_click *x = (t_click *) (w[1]); + t_float *output = (t_float *)(w[2]); + int n = (int) w[3]; + int i; + if(x->status){ + x->status = 0; + output[0] = x->float_value; + for(i = 1; i < n; i++){ + output[i] = 0.0; + } + } + else { + for(i = 0; i < n; i++){ + output[i] = 0.0; + } + } + return w+4; +} + +void click_dsp(t_click *x, t_signal **sp) +{ + dsp_add(click_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/collect.pl b/externals/lyonpotpourri/collect.pl new file mode 100755 index 000000000..1a3d0e29a --- /dev/null +++ b/externals/lyonpotpourri/collect.pl @@ -0,0 +1,6 @@ +while(<*>){ + chomp; + if(/darwin$/ | /liblyonpotpourri.dylib/){ + `mv $_ darwin_bin64`; + } +} diff --git a/externals/lyonpotpourri/convert.c b/externals/lyonpotpourri/convert.c new file mode 100755 index 000000000..01317746e --- /dev/null +++ b/externals/lyonpotpourri/convert.c @@ -0,0 +1 @@ +#include "fftease.h" /* S is a spectrum in rfft format, i.e., it contains N real values arranged as real followed by imaginary values, except for first two values, which are real parts of 0 and Nyquist frequencies; convert first changes these into N/2+1 PAIRS of magnitude and phase values to be stored in output array C; the phases are then unwrapped and successive phase differences are used to compute estimates of the instantaneous frequencies for each phase vocoder analysis channel; decimation rate D and sampling rate R are used to render these frequency values directly in Hz. */ void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) { float phase, phasediff; int real, imag, amp, freq; float a, b; int i; /* float myTWOPI, myPI; */ /* double sin(), cos(), atan(), hypot();*/ /* myTWOPI = 8.*atan(1.); myPI = 4.*atan(1.); */ for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); if ( C[amp] == 0. ) phasediff = 0.; else { phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; lastphase[i] = phase; while ( phasediff > PI ) phasediff -= TWOPI; while ( phasediff < -PI ) phasediff += TWOPI; } C[freq] = phasediff*factor + i*fundamental; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/convolver~-help.pd b/externals/lyonpotpourri/convolver~-help.pd new file mode 100755 index 000000000..660142260 --- /dev/null +++ b/externals/lyonpotpourri/convolver~-help.pd @@ -0,0 +1,88 @@ +#N canvas 555 371 681 515 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array cdemo_impulse 66162 float 2; +#X coords 0 1 66162 -1 200 140 1; +#X restore 268 41 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array cdemo_source 62079 float 2; +#X coords 0 1 62079 -1 200 140 1; +#X restore 24 89 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array cdemo_dest 131072 float 2; +#X coords 0 1 131072 -1 200 140 1; +#X restore 25 243 graph; +#X obj 269 222 convolver~ cdemo_source cdemo_impulse cdemo_dest; +#X obj 269 241 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 434 427 s convo_demo_msg; +#X obj 269 203 r convo_demo_msg; +#X msg 271 400 convolve; +#X obj 473 65 tabplay~ cdemo_dest; +#X obj 473 139 *~ 0.1; +#X obj 473 161 dac~; +#X obj 473 41 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 512 121 5 0 0 0 - - -, f 5; +#X msg 24 397 bang; +#X obj 515 106 hsl 100 12 0 1 0 0 empty empty gain -2 -8 0 8 -261570 +-1 -1 0 1; +#X msg 434 398 noiseimp \$1; +#X floatatom 434 380 5 0 0 0 - - -, f 5; +#X msg 526 398 spikeimp \$1; +#X floatatom 526 382 5 0 0 0 - - -, f 5; +#X obj 271 421 s convo_demo_msg; +#X text 288 242 operation completion bang; +#X obj 432 325 soundfiler; +#X obj 432 289 openpanel; +#X msg 432 270 bang; +#X msg 432 307 read -resize \$1 cdemo_impulse; +#X msg 573 155 \; pd dsp \$1; +#X obj 573 131 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 430 351 ... or build a synthetic impulse; +#N canvas 715 441 450 300 sound-source 0; +#X obj 104 159 soundfiler; +#X obj 104 120 loadbang; +#X obj 104 88 soundfiler; +#X obj 104 52 openpanel; +#X msg 104 70 read -resize \$1 cdemo_source; +#X obj 104 34 inlet; +#X text 175 122 default sound; +#X obj 44 242 s convo_demo_msg; +#X msg 44 218 noiseimp -5; +#X obj 44 193 loadbang; +#X text 112 195 default impulse; +#X msg 104 141 read -resize sound/voice.wav cdemo_source; +#X connect 1 0 11 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 11 0 0 0; +#X restore 24 421 pd sound-source; +#X obj 23 8 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 22 41 convolver~ - non-real-time convolution; +#X text 64 398 1 find a soundfile to convolve; +#X text 471 271 2 find an impulse response; +#X text 269 380 3 perform convolution; +#X text 492 41 4 play convolution result; +#X connect 3 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 19 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 9 0 10 1; +#X connect 11 0 8 0; +#X connect 12 0 9 1; +#X connect 13 0 28 0; +#X connect 14 0 12 0; +#X connect 15 0 5 0; +#X connect 16 0 15 0; +#X connect 17 0 5 0; +#X connect 18 0 17 0; +#X connect 22 0 24 0; +#X connect 23 0 22 0; +#X connect 24 0 21 0; +#X connect 26 0 25 0; diff --git a/externals/lyonpotpourri/convolver~.c b/externals/lyonpotpourri/convolver~.c new file mode 100755 index 000000000..ce60801e1 --- /dev/null +++ b/externals/lyonpotpourri/convolver~.c @@ -0,0 +1,1009 @@ +#include "m_pd.h" +//#include "lpp.h" +#include "fftease_oldskool.h" +#include "MSPd.h" + +#define OBJECT_NAME "convolver~" +#define DENORM_WANT_FIX 1 + +#define COMPILE_DATE "1.7.08" +#define OBJECT_VERSION "2.02" + +#define FIX_DENORM_FLOAT(v) (v=(fabs(v) < 0.000001 ? 0.f : (v))) +static t_class *convolver_class; + +#define CBUF_SIZE 32768 +#define NCMAX 52428800 + +typedef struct _buffy { + t_word *b_samples; + long b_frames; + long b_nchans; + long b_valid; + t_garray *b; + t_symbol *myname; +} t_buffy; + + +typedef struct _convolver +{ + t_object x_obj; + float x_f; + t_buffy *impulse; // impulse buffer + t_buffy *source; // source buffer + t_buffy *dest; // output buffer + void *bang; // completion bang + float sr; + // convolution stuff + float *tbuf; + float *sbuf; + float *filt; + long N; + long N2; + long last_N; + // for fast fft + float mult; + float *trigland; + int *bitshuffle; + short static_memory; // flag to avoid dynamic memory manipulation +} t_convolver; + +// maybe no dsp method +float boundrand(float min, float max); +void convolver_setbuf(t_buffy *trybuf); + +void *convolver_new(t_symbol *msg, short argc, t_atom *argv); +t_int *convolver_perform(t_int *w); + +void convolver_mute(t_convolver *x, t_floatarg toggle); +void convolver_assist (t_convolver *x, void *b, long msg, long arg, char *dst); +void convolver_dsp_free(t_convolver *x); +void convolver_seed(t_convolver *x, t_floatarg seed); +// void convolver_dsp(t_convolver *x, t_signal **sp, short *count); +void convolver_attach_buffers(t_convolver *x) ; +void convolver_spikeimp(t_convolver *x, t_floatarg density); +void convolver_convolve(t_convolver *x); +void convolver_convolvechans(t_convolver *x, t_symbol *msg, short argc, t_atom *argv); +void convolver_version(t_convolver *x); +void convolver_noiseimp(t_convolver *x, t_floatarg curve); + +void rfft( float *x, int N, int forward ); +void cfft( float *x, int NC, int forward ); +void bitreverse( float *x, int N ); +void convolver_static_memory(t_convolver *x, t_floatarg toggle); + + +void convolver_tilde_setup(void){ + convolver_class = class_new(gensym("convolver~"), (t_newmethod)convolver_new, + (t_method)convolver_dsp_free,sizeof(t_convolver), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(convolver_class, t_convolver, x_f); + // class_addmethod(convolver_class,(t_method)convolver_dsp,gensym("dsp"),0); + class_addmethod(convolver_class,(t_method)convolver_spikeimp,gensym("spikeimp"), A_FLOAT, 0); + class_addmethod(convolver_class,(t_method)convolver_noiseimp, gensym("noiseimp"),A_FLOAT, 0); + class_addmethod(convolver_class,(t_method)convolver_convolve, gensym("convolve"),0); + class_addmethod(convolver_class,(t_method)convolver_static_memory, gensym("static_memory"),A_FLOAT, 0); + potpourri_announce(OBJECT_NAME); +} + +void convolver_static_memory(t_convolver *x, t_floatarg toggle) +{ + + long memcount = 0; + float *tbuf = x->tbuf; + float *sbuf = x->sbuf; + float *filt = x->filt; + int *bitshuffle = x->bitshuffle; + float *trigland = x->trigland; + t_buffy *impulse = x->impulse; + long N, N2; + + x->static_memory = (short) toggle; + + if( x->static_memory ){ + convolver_attach_buffers( x ); + + for( N2 = 2; N2 < NCMAX; N2 *= 2){ + if( N2 >= impulse->b_frames ){ + // post("%s: Exceeded Impulse Maximum: %d",OBJECT_NAME, NCMAX); + break; + } + } + N = 2 * N2; + + post("%s: memory is now static - do not reload your impulse buffer",OBJECT_NAME); + + if ((sbuf = (float *) calloc(N+2, sizeof(float))) == NULL) + error("%s: insufficient memory", OBJECT_NAME); + memcount += (N+2) * sizeof(float); + if ((tbuf = (float *) calloc(N2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + memcount += (N2) * sizeof(float); + if ((filt = (float *) calloc(N+2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + memcount += (N+2) * sizeof(float); + if( (bitshuffle = (int *) calloc(N * 2, sizeof(int))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + memcount += (N2) * sizeof(float); + if( (trigland = (float *) calloc(N * 2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + memcount += (N2) * sizeof(float); + post("%s: allocated %f Megabytes for %s", OBJECT_NAME, (float)memcount / 1000000.0, impulse->myname->s_name); + } +} + + + +void convolver_seed(t_convolver *x, t_floatarg seed) +{ + t_convolver *fraud; + fraud = x; + srand((long)seed); +} + +void convolver_convolve(t_convolver *x) +{ + int i; + t_symbol *mymsg; + short myargc = 3; + t_atom data[3]; + mymsg = (t_symbol *) calloc(1, sizeof(t_symbol)); + convolver_attach_buffers( x ); + if(x->source->b_nchans == x->impulse->b_nchans && x->impulse->b_nchans == x->dest->b_nchans){ + // post("case 1"); + for(i = 0; i < x->source->b_nchans; i++){ + SETFLOAT(data, i+1); // source + SETFLOAT(data+1, i+1); // impulse + SETFLOAT(data+2, i+1); // destination + convolver_convolvechans(x, mymsg, myargc, data); + } + } + else if(x->source->b_nchans == 1 && x->impulse->b_nchans == x->dest->b_nchans){ + //post("case 2"); + for(i = 0; i < x->impulse->b_nchans; i++){ + SETFLOAT(data, 1); // source + SETFLOAT(data+1, i+1); // impulse + SETFLOAT(data+2, i+1); // destination + convolver_convolvechans(x, mymsg, myargc, data); + } + } + else if(x->impulse->b_nchans == 1 && x->source->b_nchans == x->dest->b_nchans){ + //post("case 3"); + for(i = 0; i < x->impulse->b_nchans; i++){ + SETFLOAT(data, i+1); // source + SETFLOAT(data+1, 1); // impulse + SETFLOAT(data+2, i+1); // destination + convolver_convolvechans(x, mymsg, myargc, data); + } + } else { + post("%s: \"convolve\" is not smart enough to figure out what you want to do. Try \"convolvechans\"",OBJECT_NAME); + post("source chans: %d, impulse chans: %d, dest chans: %d",x->source->b_nchans, x->impulse->b_nchans, x->dest->b_nchans ); + } + outlet_bang(x->bang); +} + +void convolver_convolvechans(t_convolver *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_symbol *fraud; + float *tbuf = x->tbuf; + float *sbuf = x->sbuf; + float *filt = x->filt; + long N = x->N; + long N2 = x->N2; + long i, j, ip, ip1; + long ifr_cnt = 0, ofr_cnt = 0; + long inframes, outframes; + int target_frames = 2; + short copacetic; // loop enabler + float a,b,temp,max=0.0,gain=1.0; //,thresh=.0000000001,fmag; + int readframes, writeframes; + t_buffy *impulse = x->impulse; + t_buffy *source = x->source; + t_buffy *dest = x->dest; + int *bitshuffle = x->bitshuffle; + float *trigland = x->trigland; + long source_chan, impulse_chan, dest_chan; + float rescale = 0.5 / (float) N; + fraud = msg; +// t_atom newsize; + + convolver_attach_buffers( x ); + + source_chan = atom_getfloatarg(0,argc,argv); + impulse_chan = atom_getfloatarg(1,argc,argv); + dest_chan = atom_getfloatarg(2,argc,argv); +// post("chans %d %d %d", source_chan, impulse_chan, dest_chan); + if( source_chan <= 0 || impulse_chan <= 0 || dest_chan <= 0){ + error("%s: channels are counted starting from 1",OBJECT_NAME); + return; + } + if( source_chan > source->b_nchans ){ + error("%s: source channel %d out of range", OBJECT_NAME, source_chan); + return; + } + if( impulse_chan > impulse->b_nchans ){ + error("%s: impulse channel %d out of range", OBJECT_NAME, impulse_chan); + return; + } + if( dest_chan > dest->b_nchans ){ + error("%s: dest channel %d out of range", OBJECT_NAME, dest_chan); + return; + } + --source_chan; + --impulse_chan; + --dest_chan; + inframes = source->b_frames; + outframes = dest->b_frames; + // initialization routine (move out and only do once) + for( N2 = 2; N2 < NCMAX; N2 *= 2){ + if( N2 >= impulse->b_frames ) + break; + } + N = 2 * N2; + // be more careful with memory + // also be sure to clear destination buffer + + + if(! x->static_memory ){ + if ((sbuf = (float *) calloc(N+2, sizeof(float))) == NULL) + error("%s: insufficient memory", OBJECT_NAME); + if ((tbuf = (float *) calloc(N2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + if ((filt = (float *) calloc(N+2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + if( (bitshuffle = (int *) calloc(N * 2, sizeof(int))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + if( (trigland = (float *) calloc(N * 2, sizeof(float))) == NULL) + error("%s: insufficient memory",OBJECT_NAME); + } + + x->mult = 1. / (float) N; + x->last_N = N; + init_rdft( N, bitshuffle, trigland); + + + + for(i = 0, j = 0; i < impulse->b_frames; i+= impulse->b_nchans, j++){ + filt[j] = impulse->b_samples[i + impulse_chan].w_float; + } + + rdft( N, 1, filt, bitshuffle, trigland ); + + for (i=0; i <= N; i += 2){ + + a = filt[i]; + b = filt[i + 1]; + temp = a*a + b*b; + if (temp > max) + max = temp; + } + + if (max != 0.) { + max = gain/(sqrt(max)); + } + else { + error("%s: impulse response is all zeros",OBJECT_NAME); + return; + } + // make normalization optional + for (i=0; i< N+2; i++) + filt[i] *= max; + + ifr_cnt = ofr_cnt = 0; + + if(source->b_frames - ifr_cnt >= N2) + readframes = N2; + else readframes = source->b_frames - ifr_cnt; + // read desired channel from multichannel source buffer into sbuf + for(i = 0, j = ifr_cnt * dest->b_nchans; i < readframes; i++, ifr_cnt++, j += source->b_nchans) + sbuf[i] = source->b_samples[j + source_chan].w_float; + // zero pad source buffer + for (i = readframes; i<N+2; i++) + sbuf[i] = 0.; + copacetic = 1; + + while( target_frames < source->b_frames + impulse->b_frames ){ + target_frames *= 2; + } + //post("src frames + imp frames %d dest frames %d",source->b_frames + impulse->b_frames, dest->b_frames); + + if( dest->b_frames < target_frames){ + + + //SETFLOAT(&newsize, (float) target_frames); + // typedmess((void *) x->dest->b, gensym("sizeinsamps"),1, &newsize); + garray_resize(x->dest->b,(float)target_frames ); + post("%s: destination buffer was too small and has been resized",OBJECT_NAME); + convolver_attach_buffers( x ); + } + + while(copacetic && ofr_cnt < ifr_cnt + N2){ + // post("ofr %d ifr %d, N %d",ofr_cnt, ifr_cnt, N); + + // convolve source buffer with filter buffer + rdft( N, 1, sbuf, bitshuffle, trigland ); + for (i=0; i<=N2; i++) { + ip = 2*i; + ip1 = ip + 1; + a = sbuf[ip] * filt[ip] - sbuf[ip1] * filt[ip1]; + b = sbuf[ip] * filt[ip1] + sbuf[ip1] * filt[ip]; + sbuf[ip] = a; + sbuf[ip1] = b; + } + // inverse fft + + rdft( N, -1, sbuf, bitshuffle, trigland ); + + //accumulate to output buffer + // denormals fix is in + for (i=0; i<N2; i++){ + FIX_DENORM_FLOAT(sbuf[i]); + tbuf[i] += sbuf[i]; + } + + // write to msp buffer + if(dest->b_frames - ofr_cnt >= N2) + writeframes = N2; + else { + writeframes = source->b_frames - ofr_cnt; + // post("cutting off with N2 %d dest frames - ofr %d", N2, dest->b_frames - ofr_cnt ); + copacetic = 0; // reached end of dest buffer + } + //shift samples to desired channel of multichannel output buffer + for(i = 0, j = ofr_cnt * dest->b_nchans; i < writeframes; i++, ofr_cnt++, j += dest->b_nchans) + dest->b_samples[j + dest_chan].w_float = tbuf[i]; + + // shift over remaining convolved samples + for (i=0; i<N2; i++){ + FIX_DENORM_FLOAT(sbuf[N2 + i]); + tbuf[i] = sbuf[N2+i]; + } + // read in next batch + if(source->b_frames - ifr_cnt >= N2) + readframes = N2; + else { + readframes = source->b_frames - ifr_cnt; + } + // arbitrary input channel read + for(i = 0, j = ifr_cnt * source->b_nchans; i < readframes; i++, ifr_cnt++, j += source->b_nchans) + sbuf[i] = source->b_samples[j + source_chan].w_float; + // zero pad + for (i = readframes; i<N+2; i++) + sbuf[i] = 0.; + } + // now normalize output buffer + + + // OK +// post("first rescale: %f", rescale); + max = 0.0; + for(i = 0, j = 0; i < dest->b_frames; i++, j += dest->b_nchans){ + if(max < fabs(dest->b_samples[j + dest_chan].w_float) ) + max = fabs(dest->b_samples[j + dest_chan].w_float); + } + if(max <= 0.0){ + post("convolvesf: zero output"); + return; + } + rescale = 1.0 / max; + // post("max: %f, second rescale: %f", max, rescale); + + for(i = 0, j = 0; i < dest->b_frames; i++, j+= dest->b_nchans){ + dest->b_samples[j + dest_chan].w_float *= rescale; + } + // FAILED BY HERE + // post("rescale done"); +// return; + + if(! x->static_memory ){ + free(sbuf); + free(tbuf); + free(filt); + free(bitshuffle); + free(trigland); + + } + outlet_bang(x->bang); + garray_redraw(x->dest->b); +} + +void convolver_noiseimp(t_convolver *x, t_floatarg curve) +{ + long b_nchans; + long b_frames; + t_word *b_samples; + float sr = x->sr; + int i; + int count; +// int position; + float gain, guess; + float dur; + float level = 1.0, endLevel = 0.001; + float grow, a1, a2, b1; + + if(fabs(curve) < 0.001){ + curve = 0.001; + } + // let's be current + convolver_attach_buffers(x); + b_nchans = x->impulse->b_nchans; + b_frames = x->impulse->b_frames; + b_samples = x->impulse->b_samples; + // chan test + if( sr == 0. ){ + error("zero sample rate"); + return; + } + // zero out buffer + dur = (float) b_frames / sr; + count = b_frames; + if(b_frames < 20){ + post("impulse buffer too small!"); + return; + } + + +// memset((char *)b_samples, 0, b_nchans * b_frames * sizeof(float)); + // return; + + level = 1.0; + endLevel = 0.001; + grow = exp(curve / (count - 1) ); + a1 = (endLevel - level) / (1.0 - exp(curve)); + a2 = level + a1; + b1 = a1; + for( i = 0; i < b_frames; i++ ){ + guess = boundrand(-1.0, 1.0); + gain = 1. - guess; + + b1 = b1 * grow; + level = a2 - b1; + b_samples[i].w_float = level * guess; + } + + garray_redraw(x->impulse->b); + outlet_bang(x->bang); + +} + +void convolver_spikeimp(t_convolver *x, t_floatarg density) +{ + long b_nchans; + long b_frames; + t_word *b_samples; + float sr = x->sr; + int i, j; + int count; + int position; + float gain, guess; + float dur; + + // let's be current + convolver_attach_buffers(x); + b_nchans = x->impulse->b_nchans; + b_frames = x->impulse->b_frames; + b_samples = x->impulse->b_samples; + // chan test + if( sr == 0. ){ + error("zero sample rate"); + return; + } + // zero out buffer + dur = (float) b_frames / sr; + count = density * dur; + memset((char *)b_samples, 0, b_nchans * b_frames * sizeof(float)); + // return; + for( j = 0; j < b_nchans; j++ ){ + for( i = 0; i < count; i++ ){ + guess = boundrand(0., 1.); + gain = 1. - guess; + gain = gain * gain; + if( boundrand(0.0,1.0) > 0.5 ){ + gain = gain * -1.0; // randomly invert signs to remove DC + } + position = (int) (dur * guess * guess * sr) * b_nchans + j; + if( position >= b_frames * b_nchans ){ + error("%d exceeds %d",position, b_frames * b_nchans); + } else{ + b_samples[ position ].w_float = gain; + } + } + } + garray_redraw(x->impulse->b); + outlet_bang(x->bang); +} + +float boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); +} + + +void *convolver_new(t_symbol *msg, short argc, t_atom *argv) +{ + + t_convolver *x = (t_convolver *)pd_new(convolver_class); + t_symbol *fraud; + fraud = msg; + x->bang = outlet_new(&x->x_obj, gensym("bang")); + srand(time(0)); //need "seed" message + x->impulse = (t_buffy *)malloc(sizeof(t_buffy)); + x->source = (t_buffy *)malloc(sizeof(t_buffy)); + x->dest = (t_buffy *)malloc(sizeof(t_buffy)); + x->static_memory = 0; + + // default names + x->impulse->myname = gensym("impulse_buf"); + x->source->myname = gensym("source_buf"); + x->dest->myname = gensym("dest_buf"); + + x->last_N = -1; + + x->source->myname = atom_getsymbolarg(0,argc,argv); + x->impulse->myname = atom_getsymbolarg(1,argc,argv); + x->dest->myname = atom_getsymbolarg(2,argc,argv); + + x->sr = sys_getsr(); + return (x); +} + + +void convolver_attach_buffers(t_convolver *x) +{ + convolver_setbuf(x->source); + convolver_setbuf(x->impulse); + convolver_setbuf(x->dest); +} + + +void convolver_setbuf(t_buffy *trybuf) +{ + t_garray *a; + int b_frames; + /* load up sample array */ + if (!(a = (t_garray *)pd_findbyclass(trybuf->myname, garray_class))) { + if (*trybuf->myname->s_name) pd_error("%s: %s: no such array", OBJECT_NAME, trybuf->myname->s_name); + } + else if (!garray_getfloatwords(a, &b_frames, &trybuf->b_samples)) { // possible crash worry? + pd_error("%s: bad template for %s", trybuf->myname->s_name,OBJECT_NAME); + trybuf->b_valid = 0; + } + else { + trybuf->b_frames = b_frames; + trybuf->b_nchans = 1; // Pd buffers are always mono (so far) + trybuf->b = a; // link to array + garray_usedindsp(a); + } +} + + +t_int *convolver_perform(t_int *w) +{ + return w + 4; // maybe we don't need this guy at all +} + +void convolver_dsp_free(t_convolver *x) +{ + if( x->static_memory ){ + free(x->sbuf); + free(x->tbuf); + free(x->filt); + free(x->bitshuffle); + free(x->trigland); + outlet_bang(x->bang); + } +} + +/* +void convolver_dsp(t_convolver *x, t_signal **sp, short *count) +{ +// never actually do anything here +} +*/ + + +// old FFT stuff, soon to be replaced + + + + +void cfft( float *x, int NC, int forward ) + +{ + float wr,wi, + wpr,wpi, + theta, + scale; + int mmax, + ND, + m, + i,j, + delta; + + // void bitreverse(); + + ND = NC<<1; + bitreverse( x, ND ); + for ( mmax = 2; mmax < ND; mmax = delta ) { + delta = mmax<<1; + theta = TWOPI/( forward? mmax : -mmax ); + wpr = -2.*pow( sin( 0.5*theta ), 2. ); + wpi = sin( theta ); + wr = 1.; + wi = 0.; + for ( m = 0; m < mmax; m += 2 ) { + register float rtemp, itemp; + for ( i = m; i < ND; i += delta ) { + j = i + mmax; + rtemp = wr*x[j] - wi*x[j+1]; + itemp = wr*x[j+1] + wi*x[j]; + x[j] = x[i] - rtemp; + x[j+1] = x[i+1] - itemp; + x[i] += rtemp; + x[i+1] += itemp; + } + wr = (rtemp = wr)*wpr - wi*wpi + wr; + wi = wi*wpr + rtemp*wpi + wi; + } + } + + /* scale output */ + + scale = forward ? 1./ND : 2.; + { register float *xi=x, *xe=x+ND; + while ( xi < xe ) + *xi++ *= scale; + } +} + +/* bitreverse places float array x containing N/2 complex values +into bit-reversed order */ + +void bitreverse( float *x, int N ) + +{ + float rtemp,itemp; + int i,j, + m; + + for ( i = j = 0; i < N; i += 2, j += m ) { + if ( j > i ) { + rtemp = x[j]; itemp = x[j+1]; /* complex exchange */ + x[j] = x[i]; x[j+1] = x[i+1]; + x[i] = rtemp; x[i+1] = itemp; + } + for ( m = N>>1; m >= 2 && j >= m; m >>= 1 ) + j -= m; + } +} + +void init_rdft(int n, int *ip, float *w) +{ + + int nw, + nc; + +// void makewt(int nw, int *ip, float *w); +// void makect(int nc, int *ip, float *c); + + nw = n >> 2; + makewt(nw, ip, w); + + nc = n >> 2; + makect(nc, ip, w + nw); + + return; +} + + +void rdft(int n, int isgn, float *a, int *ip, float *w) +{ + + int j, + nw, + nc; + + float xi; + + // void bitrv2(int n, int *ip, float *a), +// cftsub(int n, float *a, float *w), +// rftsub(int n, float *a, int nc, float *c); + + + nw = ip[0]; + nc = ip[1]; + + if (isgn < 0) { + a[1] = 0.5 * (a[1] - a[0]); + a[0] += a[1]; + + for (j = 3; j <= n - 1; j += 2) { + a[j] = -a[j]; + } + + if (n > 4) { + rftsub(n, a, nc, w + nw); + bitrv2(n, ip + 2, a); + } + + cftsub(n, a, w); + + for (j = 1; j <= n - 1; j += 2) { + a[j] = -a[j]; + } + } + + else { + + if (n > 4) { + bitrv2(n, ip + 2, a); + } + + cftsub(n, a, w); + + if (n > 4) { + rftsub(n, a, nc, w + nw); + } + + xi = a[0] - a[1]; + a[0] += a[1]; + a[1] = xi; + } +} + + +void bitrv2(int n, int *ip, float *a) +{ + int j, jj1, k, k1, l, m, m2; + float xr, xi; + + ip[0] = 0; + l = n; + m = 1; + + while ((m << 2) < l) { + l >>= 1; + for (j = 0; j <= m - 1; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + + if ((m << 2) > l) { + + for (k = 1; k <= m - 1; k++) { + + for (j = 0; j <= k - 1; j++) { + jj1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[jj1]; + xi = a[jj1 + 1]; + a[jj1] = a[k1]; + a[jj1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } + + else { + m2 = m << 1; + + for (k = 1; k <= m - 1; k++) { + + for (j = 0; j <= k - 1; j++) { + jj1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[jj1]; + xi = a[jj1 + 1]; + a[jj1] = a[k1]; + a[jj1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + jj1 += m2; + k1 += m2; + xr = a[jj1]; + xi = a[jj1 + 1]; + a[jj1] = a[k1]; + a[jj1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } +} + + +void cftsub(int n, float *a, float *w) +{ + int j, jj1, j2, j3, k, k1, ks, l, m; + float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 2; + + while ((l << 1) < n) { + m = l << 2; + + for (j = 0; j <= l - 2; j += 2) { + jj1 = j + l; + j2 = jj1 + l; + j3 = j2 + l; + x0r = a[j] + a[jj1]; + x0i = a[j + 1] + a[jj1 + 1]; + x1r = a[j] - a[jj1]; + x1i = a[j + 1] - a[jj1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x0r - x2r; + a[j2 + 1] = x0i - x2i; + a[jj1] = x1r - x3i; + a[jj1 + 1] = x1i + x3r; + a[j3] = x1r + x3i; + a[j3 + 1] = x1i - x3r; + } + + if (m < n) { + wk1r = w[2]; + + for (j = m; j <= l + m - 2; j += 2) { + jj1 = j + l; + j2 = jj1 + l; + j3 = j2 + l; + x0r = a[j] + a[jj1]; + x0i = a[j + 1] + a[jj1 + 1]; + x1r = a[j] - a[jj1]; + x1i = a[j + 1] - a[jj1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + a[j2] = x2i - x0i; + a[j2 + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[jj1] = wk1r * (x0r - x0i); + a[jj1 + 1] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[j3] = wk1r * (x0i - x0r); + a[j3 + 1] = wk1r * (x0i + x0r); + } + + k1 = 1; + ks = -1; + + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + + for (j = k; j <= l + k - 2; j += 2) { + jj1 = j + l; + j2 = jj1 + l; + j3 = j2 + l; + x0r = a[j] + a[jj1]; + x0i = a[j + 1] + a[jj1 + 1]; + x1r = a[j] - a[jj1]; + x1i = a[j + 1] - a[jj1 + 1]; + x2r = a[j2] + a[j3]; + x2i = a[j2 + 1] + a[j3 + 1]; + x3r = a[j2] - a[j3]; + x3i = a[j2 + 1] - a[j3 + 1]; + a[j] = x0r + x2r; + a[j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2] = wk2r * x0r - wk2i * x0i; + a[j2 + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[jj1] = wk1r * x0r - wk1i * x0i; + a[jj1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3] = wk3r * x0r - wk3i * x0i; + a[j3 + 1] = wk3r * x0i + wk3i * x0r; + } + } + } + + l = m; + } + + if (l < n) { + + for (j = 0; j <= l - 2; j += 2) { + jj1 = j + l; + x0r = a[j] - a[jj1]; + x0i = a[j + 1] - a[jj1 + 1]; + a[j] += a[jj1]; + a[j + 1] += a[jj1 + 1]; + a[jj1] = x0r; + a[jj1 + 1] = x0i; + } + } +} + + +void rftsub(int n, float *a, int nc, float *c) +{ + int j, k, kk, ks; + float wkr, wki, xr, xi, yr, yi; + + ks = (nc << 2) / n; + kk = 0; + + for (k = (n >> 1) - 2; k >= 2; k -= 2) { + j = n - k; + kk += ks; + wkr = 0.5 - c[kk]; + wki = c[nc - kk]; + xr = a[k] - a[j]; + xi = a[k + 1] + a[j + 1]; + yr = wkr * xr - wki * xi; + yi = wkr * xi + wki * xr; + a[k] -= yr; + a[k + 1] -= yi; + a[j] += yr; + a[j + 1] -= yi; + } +} + + +void makewt(int nw, int *ip, float *w) +{ +// void bitrv2(int n, int *ip, float *a); + int nwh, j; + float delta, x, y; + + ip[0] = nw; + ip[1] = 1; + if (nw > 2) { + nwh = nw >> 1; + delta = atan(1.0) / nwh; + w[0] = 1; + w[1] = 0; + w[nwh] = cos(delta * nwh); + w[nwh + 1] = w[nwh]; + for (j = 2; j <= nwh - 2; j += 2) { + x = cos(delta * j); + y = sin(delta * j); + w[j] = x; + w[j + 1] = y; + w[nw - j] = y; + w[nw - j + 1] = x; + } + bitrv2(nw, ip + 2, w); + } +} + + +void makect(int nc, int *ip, float *c) +{ + int nch, j; + float delta; + + ip[1] = nc; + if (nc > 1) { + nch = nc >> 1; + delta = atan(1.0) / nch; + c[0] = 0.5; + c[nch] = 0.5 * cos(delta * nch); + for (j = 1; j <= nch - 1; j++) { + c[j] = 0.5 * cos(delta * j); + c[nc - j] = 0.5 * sin(delta * j); + } + } +} + diff --git a/externals/lyonpotpourri/counter~-help.pd b/externals/lyonpotpourri/counter~-help.pd new file mode 100755 index 000000000..3cd4e7de0 --- /dev/null +++ b/externals/lyonpotpourri/counter~-help.pd @@ -0,0 +1,32 @@ +#N canvas 617 472 355 264 10; +#X obj 32 143 counter~ 1 10; +#X obj 32 169 click2float~; +#X floatatom 32 204 5 0 0 0 - - -, f 5; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 26 49 counter~ - click-driven counter; +#X obj 32 81 samm~ 60 2; +#N canvas 539 566 450 300 messages 0; +#X obj 86 215 s counter.msgs; +#X msg 87 118 minmax 20 30; +#X msg 217 120 direction \$1; +#X msg 218 58 1; +#X msg 262 84 -1; +#X text 248 58 forward; +#X text 291 83 backward; +#X msg 191 174 setnext 25; +#X text 76 99 reset boundaries; +#X text 269 174 set next value; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 2 0; +#X connect 7 0 0 0; +#X restore 149 177 pd messages; +#X obj 40 114 r counter.msgs; +#X text 155 136 args: minimum \, maximum; +#X text 234 178 <- more here; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 5 0 0 0; +#X connect 7 0 0 0; diff --git a/externals/lyonpotpourri/counter~.c b/externals/lyonpotpourri/counter~.c new file mode 100755 index 000000000..2c529b430 --- /dev/null +++ b/externals/lyonpotpourri/counter~.c @@ -0,0 +1,127 @@ +#include "MSPd.h" + +static t_class *counter_class; + +#define OBJECT_NAME "counter~" + +#define COUNTER_UP (1) +#define COUNTER_DOWN (-1) + +typedef struct _counter +{ + t_object x_obj; + float x_f; + long current; + long min; + long max; + short direction; +} t_counter; + +static void *counter_new(t_symbol *s, int argc, t_atom *argv); +static t_int *counter_perform(t_int *w); +static void counter_dsp(t_counter *x, t_signal **sp); +static void counter_setnext(t_counter *x, t_floatarg val); +static void counter_direction(t_counter *x, t_floatarg d); +static void counter_minmax(t_counter *x, t_floatarg min, t_floatarg max); +static void counter_version(t_counter *x); + +void counter_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("counter~"), (t_newmethod)counter_new,0,sizeof(t_counter), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_counter, x_f); + class_addmethod(c, (t_method)counter_minmax,gensym("minmax"),A_FLOAT,A_FLOAT,0); + class_addmethod(c, (t_method)counter_direction,gensym("direction"),A_FLOAT,0); + class_addmethod(c, (t_method)counter_setnext,gensym("setnext"),A_FLOAT,0); + class_addmethod(c, (t_method)counter_dsp, gensym("dsp"), 0); + counter_class = c; + potpourri_announce(OBJECT_NAME); +} + +static void counter_setnext(t_counter *x, t_floatarg val) +{ + if( val < x->min || val > x->max) + return; + x->current = (long) val; +} + +static void counter_direction(t_counter *x, t_floatarg d) +{ + if( (d != COUNTER_UP) && (d != COUNTER_DOWN) ) + return; + x->direction = (short) d; +} + +static void counter_minmax(t_counter *x, t_floatarg min, t_floatarg max) +{ + if(min < 1){ + return; + } + if(min >= max){ + return; + } + x->min = min; + x->max = max; +} + +static void *counter_new(t_symbol *s, int argc, t_atom *argv) +{ + float farg; + t_symbol *fraud; + t_counter *x = (t_counter *)pd_new(counter_class); + fraud = s; + outlet_new(&x->x_obj, gensym("signal")); + x->direction = COUNTER_UP; + farg = 1.0; + atom_arg_getfloat(&farg,0,argc,argv); + x->min = farg; + farg = 10.0; + atom_arg_getfloat(&farg,1,argc,argv); + x->max = farg; + if(x->min <= 1) + x->min = 1; + if(x->max <= x->min) + x->max = 10; + + return x; +} + +static t_int *counter_perform(t_int *w) +{ + t_counter *x = (t_counter *) (w[1]); + t_float *in_vec = (t_float *)(w[2]); + t_float *out_vec = (t_float *)(w[3]); + int n = (int) w[4]; + + int i; + long min = x->min; + long max = x->max; + long current = x->current; + short direction = x->direction; + + for(i = 0; i < n; i++){ + if(in_vec[i]){ + out_vec[i] = current; + current = current + direction; + if( direction == COUNTER_UP ){ + if( current > max ){ + current = min; + } + } else if( direction == COUNTER_DOWN ){ + if( current < min ){ + current = max; + } + } + } else { + out_vec[i] = 0.0; + } + } + + x->current = current; + return w + 5; +} + +static void counter_dsp(t_counter *x, t_signal **sp) +{ + dsp_add(counter_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/distortion~-help.pd b/externals/lyonpotpourri/distortion~-help.pd new file mode 100755 index 000000000..f5df2901a --- /dev/null +++ b/externals/lyonpotpourri/distortion~-help.pd @@ -0,0 +1,41 @@ +#N canvas 178 231 501 301 10; +#X obj 30 154 distortion~; +#X floatatom 66 131 5 0 0 0 - knee -, f 5; +#X floatatom 102 117 5 0 0 0 - cut -, f 5; +#X obj 30 112 osc~ 270; +#X floatatom 30 90 5 0 0 0 - - -, f 5; +#X obj 30 224 *~ 0.1; +#X obj 30 252 dac~; +#X msg 156 139 \; pd dsp \$1; +#X obj 156 118 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 158 184 hsl 128 15 0.001 0.4 0 0 knee knee-input knee -2 -6 +0 8 -259157 -1 -1 1560 1; +#X obj 157 216 hsl 128 15 0.01 1 0 0 cut cut-input cut -2 -6 0 8 -259157 +-1 -1 1796 1; +#X obj 30 191 lop~ 8000; +#N canvas 0 22 180 162 initialize 0; +#X obj 2 23 loadbang; +#X msg 58 64 0.15; +#X msg 3 58 0.05; +#X obj 3 108 s knee-input; +#X obj 34 89 s cut-input; +#X connect 0 0 1 0; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X restore 154 246 pd initialize; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 25 49 distortion~ uses an internal transfer function to shape +the wave. "knee" is where the transfer function starts to bend and +"cut" is the clipping point., f 79; +#X connect 0 0 11 0; +#X connect 1 0 0 1; +#X connect 2 0 0 2; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 5 0 6 1; +#X connect 8 0 7 0; +#X connect 11 0 5 0; diff --git a/externals/lyonpotpourri/distortion~.c b/externals/lyonpotpourri/distortion~.c new file mode 100755 index 000000000..498989740 --- /dev/null +++ b/externals/lyonpotpourri/distortion~.c @@ -0,0 +1,226 @@ +#include "MSPd.h" + + +static t_class *distortion_class; + + +#define OBJECT_NAME "distortion~" + +typedef struct _distortion +{ + + t_object x_obj; + float x_f; + float knee; + float cut; + float rescale ; + short mute ; + short case1; +} t_distortion; + +void *distortion_new(t_floatarg knee, t_floatarg cut); +t_int *distortion1_perform(t_int *w); +t_int *distortion2_perform(t_int *w); +t_int *distortion3_perform(t_int *w); +void distortion_dsp(t_distortion *x, t_signal **sp); +void distortion_float(t_distortion *x, double f); +void distortion_mute(t_distortion *x, t_floatarg f); + + +// no freeing function needed + +void distortion_tilde_setup(void){ + distortion_class = class_new(gensym("distortion~"), (t_newmethod)distortion_new, + 0,sizeof(t_distortion), 0,A_DEFFLOAT,A_DEFFLOAT,0); + CLASS_MAINSIGNALIN(distortion_class, t_distortion, x_f); + class_addmethod(distortion_class,(t_method)distortion_dsp,gensym("dsp"),0); + class_addmethod(distortion_class,(t_method)distortion_mute,gensym("mute"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void *distortion_new(t_floatarg knee, t_floatarg cut) +{ + + t_distortion *x = (t_distortion *)pd_new(distortion_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + if( knee >= cut || knee <= 0 || cut <= 0 ) { + // post("setting defaults"); + x->knee = .1; + x->cut = .3 ; + } else { + x->knee = knee; + x->cut = cut; + // post("User defined values: knee %f cut %f", knee, cut); + + } + x->rescale = 1.0 / x->cut ; + x->mute = 0; + return x; +} + + +// use when neither signal is connected + +t_int *distortion1_perform(t_int *w) +{ + + float rectified_sample, in_sample; + + t_distortion *x = (t_distortion *) (w[1]); + float *in = (t_float *)(w[2]); + float *out = (t_float *)(w[5]); + int n = (int)(w[6]); + + float knee = x->knee; + float cut = x->cut; + float rescale = x->rescale; + + + if( x->mute ){ + while( n-- ){ + *out++ = 0; + } + return (w+7); + } + + while (n--) { + in_sample = *in++; + rectified_sample = fabs( in_sample ); + if( rectified_sample < knee ){ + *out++ = in_sample; + } else { + if( in_sample > 0.0 ){ + *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); + } else { + *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); + } + } + + } + return (w+7); +} + +// use when both signals are connected + +t_int *distortion2_perform(t_int *w) +{ + + float rectified_sample, in_sample; + + t_distortion *x = (t_distortion *) (w[1]); + float *in = (t_float *)(w[2]); + float *data1 = (t_float *)(w[3]); + float *data2 = (t_float *)(w[4]); + float *out = (t_float *)(w[5]); + int n = (int)(w[6]); + // double fabs(); + + float knee = x->knee; + float cut = x->cut; + float rescale = x->rescale; + + + if( x->mute ){ + while( n-- ){ + *out++ = 0; + } + return (w+7); + } + + while (n--) { + in_sample = *in++; + knee = *data1++; + cut = *data2++; + if( cut > 0.000001 ) + rescale = 1.0 / cut; + else + rescale = 1.0; + + rectified_sample = fabs( in_sample ); + if( rectified_sample < knee ){ + *out++ = in_sample; + } else { + if( in_sample > 0.0 ){ + *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); + } else { + *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); + } + } + + } + x->knee = knee; + x->cut = cut; + x->rescale = rescale; + return (w+7); +} + +t_int *distortion3_perform(t_int *w) +{ + + float rectified_sample, in_sample; + + t_distortion *x = (t_distortion *) (w[1]); + float *in = (t_float *)(w[2]); + float *data1 = (t_float *)(w[3]); + float *data2 = (t_float *)(w[4]); + float *out = (t_float *)(w[5]); + int n = (int)(w[6]); + // double fabs(); + + float knee = x->knee; + float cut = x->cut; + float rescale = x->rescale; + short case1 = x->case1; + + if( x->mute ){ + while( n-- ){ + *out++ = 0; + } + return (w+7); + } + + while (n--) { + // first case, knee is connected, otherwise cut is connected + in_sample = *in++; + if( case1 ){ + knee = *data1++; + } + else { + cut = *data2++; + } + if( cut > 0.000001 ) + rescale = 1.0 / cut; + else + rescale = 1.0; + + rectified_sample = fabs( in_sample ); + if( rectified_sample < knee ){ + *out++ = in_sample; + } else { + if( in_sample > 0.0 ){ + *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); + } else { + *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); + } + } + + } + x->knee = knee; + x->cut = cut; + x->rescale = rescale; + return (w+7); +} +void distortion_mute(t_distortion *x, t_floatarg f) { + x->mute = f; +} + + +void distortion_dsp(t_distortion *x, t_signal **sp) +{ + + dsp_add(distortion2_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec,sp[0]->s_n); + +} + diff --git a/externals/lyonpotpourri/dmach~-help.pd b/externals/lyonpotpourri/dmach~-help.pd new file mode 100644 index 000000000..7f7f4bb25 --- /dev/null +++ b/externals/lyonpotpourri/dmach~-help.pd @@ -0,0 +1,1304 @@ +#N canvas 103 332 573 397 10; +#X obj 194 182 click2bang~; +#X obj 194 205 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 24 253 *~ 0.05; +#X obj 24 282 dac~; +#X obj 24 85 r dmach-msgs; +#N canvas 476 235 592 383 operation 0; +#X obj 29 285 s dmach-msgs; +#X msg 69 40 arm 1; +#X msg 89 70 mute 0; +#X msg 28 15 show 1; +#X msg 115 149 tempo \$1; +#X floatatom 115 128 5 0 0 0 - - -, f 5; +#X msg 115 106 60; +#X msg 155 105 134; +#X text 171 130 change the tempo; +#X text 114 39 prepare to play ptn 1; +#X text 137 67 now play it; +#X text 78 18 show sequence data; +#X msg 105 257 instant_recall \$1; +#X obj 106 233 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 125 206 by default patterns are recalled in rhythm at the end +of the last pattern. Setting instant_recall to 1 means you can instantly +loop or play a sequence.; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 12 0 0 0; +#X connect 13 0 12 0; +#X restore 386 153 pd operation; +#X obj 66 234 hsl 60 12 0 0.25 0 0 empty empty gain -2 -8 1 12 -228928 +-1 -1 0 1; +#X obj 144 259 s bassgain; +#X obj 277 182 s raw-dmach-data; +#N canvas 569 435 578 329 saved-patterns 0; +#X obj 63 37 r raw-dmach-data; +#X msg 130 105 listraw; +#X obj 131 141 s dmach-msgs; +#N canvas 0 22 466 316 saved 0; +#X msg 10 54 readraw 0 4 0 4 1 1 0 1 0.8 1.49998 1 1 1.99997 1 0.8 +3.49995 1 7 1 1 0 0.7 1 0.499993 1 0.8333 0.999986 1 1.111 1.74995 +1 1.111 2.49997 1 1.333 2.99996 0.666 1.653 3.49995 2 9 1 1 0.499993 +0.7 1 0.749964 1 1 1.49998 0.7 1 1.74995 1 1 2.49997 0.7 1 2.74999 +0.5 1 3.24998 1 1 3.49995 0.7 1 3.74997 3 2 1 1 0.999986 1 1 2.99996 +5 4 1 1.05 0 1 1.05 0.999986 1 1 1.99997 1 0.9 2.99996; +#X obj 10 148 s dmach-msgs; +#X connect 0 0 1 0; +#X restore 356 50 pd saved; +#X obj 63 72 print; +#X text 196 107 report current pattern to list outlet; +#X text 67 208 The resulting readraw message will load the entire pattern. +if you have a prepend you could send this data directly into a list. +Otherwise cut and paste from the Pd window.; +#X connect 0 0 4 0; +#X connect 1 0 2 0; +#X restore 386 207 pd saved-patterns; +#X obj 147 234 hsl 64 12 0 2 0 0 empty s_bassgain empty -2 -8 0 10 +-261756 -1 -1 3150 1; +#X obj 24 112 dmach~ 134 9, f 35; +#N canvas 16 184 1268 473 playback 0; +#X obj 9 52 inlet~; +#X obj 75 52 inlet~; +#X obj 143 52 inlet~; +#X obj 209 52 inlet~; +#X obj 273 52 inlet~; +#X obj 339 52 inlet~; +#X obj 404 52 inlet~; +#X obj 470 52 inlet~; +#X obj 537 52 inlet~; +#X obj 603 52 inlet~; +#X obj 10 122 player~ dmach1; +#X obj 43 145 player~ dmach2; +#X obj 56 168 player~ dmach3; +#X obj 81 195 player~ dmach4; +#X obj 117 381 outlet~; +#N canvas 509 23 498 587 bass-synth 0; +#X obj 396 334 adsr~; +#X obj 304 369 *~; +#X obj 127 544 outlet~; +#X obj 117 18 inlet~; +#X obj 183 20 inlet~; +#X obj 128 513 *~ 0; +#X floatatom 347 387 5 0 0 0 - - -, f 5; +#X obj 285 198 +~ 1400; +#X obj 285 177 *~ 1000; +#X obj 284 156 osc~ 0.25; +#X obj 278 422 vcf~ 4; +#X obj 349 422 r bassgain; +#X floatatom 350 445 5 0 0 0 - - -, f 5; +#X obj 247 334 distortion~ 0.1 0.2; +#X floatatom 311 285 5 0 0 0 - - -, f 5; +#X floatatom 375 285 5 0 0 0 - - -, f 5; +#X obj 52 131 oscil~ 440 8192 square 4; +#X obj 237 131 oscil~ 440 8192 buzz 16; +#X obj 358 49 osc~ 5; +#X obj 346 80 *~ 0.005; +#X obj 305 95 +~; +#X obj 285 61 sig~ 1; +#X obj 56 76 *~; +#N canvas 0 22 462 312 init 0; +#X obj 97 195 outlet; +#X obj 106 221 outlet; +#X obj 158 231 outlet; +#X obj 137 137 unpack f f; +#X obj 149 29 loadbang; +#X msg 83 147 4; +#X msg 149 109 0.025 0.05; +#X msg 205 194 10 30 600 100; +#X obj 209 235 outlet; +#X connect 3 0 1 0; +#X connect 3 1 2 0; +#X connect 4 0 6 0; +#X connect 4 0 5 0; +#X connect 4 0 7 0; +#X connect 5 0 0 0; +#X connect 6 0 3 0; +#X connect 7 0 8 0; +#X restore 352 247 pd init; +#X obj 230 60 *~ 0.5; +#X obj 118 462 distortion~; +#X floatatom 90 378 5 0 0 0 - - -, f 5; +#X floatatom 154 378 5 0 0 0 - - -, f 5; +#N canvas 0 22 466 316 init 0; +#X obj 106 221 outlet; +#X obj 158 231 outlet; +#X obj 137 137 unpack f f; +#X obj 149 29 loadbang; +#X msg 149 109 0.1 0.3; +#X connect 2 0 0 0; +#X connect 2 1 1 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X restore 131 340 pd init; +#X obj 121 483 lop~ 3000; +#X floatatom 227 474 5 0 0 0 - - -, f 5; +#X obj 24 448 osc~; +#X obj 94 313 *~ 0.5; +#X msg 150 293 0.666; +#X obj 27 482 *~ 0.2; +#X msg 103 262 0.5; +#X msg 144 261 0.25; +#X obj 316 499 loadbang; +#X msg 316 520 1; +#X obj 315 544 s s_bassgain; +#X connect 0 0 1 1; +#X connect 1 0 10 0; +#X connect 3 0 0 0; +#X connect 4 0 22 0; +#X connect 4 0 24 0; +#X connect 5 0 2 0; +#X connect 6 0 10 2; +#X connect 7 0 10 1; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 25 0; +#X connect 11 0 12 0; +#X connect 12 0 5 1; +#X connect 13 0 1 0; +#X connect 14 0 13 1; +#X connect 15 0 13 2; +#X connect 16 0 13 0; +#X connect 17 0 13 0; +#X connect 18 0 19 0; +#X connect 19 0 20 1; +#X connect 20 0 22 1; +#X connect 21 0 20 0; +#X connect 22 0 16 0; +#X connect 22 0 32 0; +#X connect 23 0 6 0; +#X connect 23 1 14 0; +#X connect 23 2 15 0; +#X connect 23 3 0 0; +#X connect 24 0 17 0; +#X connect 25 0 29 0; +#X connect 26 0 25 1; +#X connect 27 0 25 2; +#X connect 28 0 26 0; +#X connect 28 1 27 0; +#X connect 29 0 5 0; +#X connect 30 0 29 1; +#X connect 31 0 34 0; +#X connect 32 0 31 0; +#X connect 33 0 32 1; +#X connect 34 0 5 0; +#X connect 35 0 32 1; +#X connect 36 0 32 1; +#X connect 37 0 38 0; +#X connect 38 0 39 0; +#X restore 238 224 pd bass-synth; +#N canvas 215 196 532 615 load-waveforms 0; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach1 21988 float 2; +#X coords 0 1 21988 -1 30 20 1; +#X restore 100 20 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach2 25652 float 2; +#X coords 0 1 25652 -1 30 20 1; +#X restore 100 60 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach3 11171 float 2; +#X coords 0 1 11171 -1 30 20 1; +#X restore 181 20 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach4 9284 float 2; +#X coords 0 1 9284 -1 30 20 1; +#X restore 181 60 graph; +#X obj 18 408 soundfiler; +#X obj 14 77 loadbang; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach5 42964 float 2; +#X coords 0 1 42964 -1 30 20 1; +#X restore 252 22 graph; +#X obj 14 103 t b b b b b b b b; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach6 44614 float 2; +#X coords 0 1 44614 -1 30 20 1; +#X restore 253 61 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach7 9097 float 2; +#X coords 0 1 9097 -1 30 20 1; +#X restore 317 23 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dmach8 10741 float 2; +#X coords 0 1 10741 -1 30 20 1; +#X restore 319 59 graph; +#X obj 32 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 165 137 read -resize sound/BT0AADA.aiff dmach1; +#X msg 196 156 read -resize sound/trickhit.aif dmach2; +#X msg 229 176 read -resize sound/hi_o_15g.aiff dmach3; +#X msg 240 202 read -resize sound/KR55SNAR.aiff dmach4; +#X msg 255 240 read -resize sound/soda-bd.aif dmach5; +#X msg 267 282 read -resize sound/BD0010.aif dmach6; +#X msg 257 338 read -resize sound/hi_c_12b.aiff dmach7; +#X msg 262 358 read -resize sound/CP.aif dmach8; +#X connect 5 0 7 0; +#X connect 7 0 12 0; +#X connect 7 1 13 0; +#X connect 7 2 14 0; +#X connect 7 3 15 0; +#X connect 7 4 16 0; +#X connect 7 5 17 0; +#X connect 7 6 18 0; +#X connect 7 7 19 0; +#X connect 11 0 7 0; +#X connect 12 0 4 0; +#X connect 13 0 4 0; +#X connect 14 0 4 0; +#X connect 15 0 4 0; +#X connect 16 0 4 0; +#X connect 17 0 4 0; +#X connect 18 0 4 0; +#X connect 19 0 4 0; +#X restore 940 21 pd load-waveforms; +#X msg 113 18 static_increment 1; +#X obj 113 -2 loadbang; +#X obj 694 51 inlet~; +#X obj 760 51 inlet~; +#X obj 826 51 inlet~; +#X obj 892 51 inlet~; +#X obj 959 50 inlet~; +#X obj 1025 50 inlet~; +#X obj 363 240 player~ dmach5; +#X obj 1085 49 inlet~; +#X obj 1151 49 inlet~; +#X obj 462 264 player~ dmach6; +#X obj 573 264 player~ dmach7; +#X obj 681 266 player~ dmach8; +#X obj 890 282 snapshot~; +#X obj 1008 253 metro 150; +#X msg 1029 222 1; +#X floatatom 905 313 5 0 0 0 - - -, f 5; +#N canvas 172 230 208 286 assignments 0; +#X text 41 123 4 bassline; +#X text 41 25 0 bassdrum; +#X text 41 48 1 trick hit; +#X text 41 73 2 open hihat; +#X text 41 98 3 snare drum; +#X text 41 148 5 soda bd; +#X text 41 173 6 808 bd; +#X text 41 198 7 closed hihat; +#X text 41 223 8 claps; +#X restore 471 407 pd assignments; +#X connect 0 0 10 0; +#X connect 1 0 10 1; +#X connect 2 0 11 0; +#X connect 3 0 11 1; +#X connect 4 0 12 0; +#X connect 5 0 12 1; +#X connect 6 0 13 0; +#X connect 7 0 13 1; +#X connect 8 0 15 0; +#X connect 9 0 15 1; +#X connect 10 0 14 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 15 0 14 0; +#X connect 17 0 10 0; +#X connect 17 0 11 0; +#X connect 17 0 12 0; +#X connect 17 0 13 0; +#X connect 17 0 25 0; +#X connect 17 0 28 0; +#X connect 17 0 29 0; +#X connect 17 0 30 0; +#X connect 18 0 17 0; +#X connect 19 0 25 0; +#X connect 20 0 25 1; +#X connect 21 0 28 0; +#X connect 22 0 28 1; +#X connect 23 0 29 0; +#X connect 24 0 29 1; +#X connect 25 0 14 0; +#X connect 26 0 30 0; +#X connect 27 0 30 1; +#X connect 27 0 31 0; +#X connect 28 0 14 0; +#X connect 29 0 14 0; +#X connect 30 0 14 0; +#X connect 31 0 34 0; +#X connect 32 0 31 0; +#X connect 33 0 32 0; +#X restore 24 182 pd playback, f 26; +#N canvas 515 23 653 793 pattern-tutorial 0; +#X text 31 19 You can build up patterns 1 line at a time. Here's how. +; +#X text 16 62 1 make sure the sequencer is off; +#X obj 31 116 s dmach-msgs; +#X msg 32 91 nosequence; +#X text 21 149 2 Define the bar. First number is the bar number. Second +number is the quarternote count. 4 would be 4/4. 3 would be 3/4. 3.5 +would be 7/8. Since you can use any fraction you like there is considerable +time flexibility.; +#X msg 26 213 store 5 4; +#X text 103 215 put a 4/4 into bar number 5; +#X obj 26 241 s dmach-msgs; +#X text 27 285 3 Write your bass drum part - 4 on the floor in this +case.; +#X msg 34 324 slotamps 5 6 4 1 0.7 0.7 0.7; +#X obj 34 349 s dmach-msgs; +#X obj 38 496 s dmach-msgs; +#X msg 38 471 slotamps 5 3 8 0 0 1 0 0 0 0 1; +#X obj 38 598 s dmach-msgs; +#X msg 38 564 slotamps 5 7 16 1 0.5 0.7 0 1 0.5 0.7 0 1 0.5 0.7 0.9 +1 0 0.7 0.7; +#X obj 42 690 s dmach-msgs; +#X text 38 629 6 Now we'll add a line with pitch variation. First we +write the rhythm.; +#X text 44 721 Here's the interval pattern:; +#X obj 38 786 s dmach-msgs; +#X text 132 783 after the bar number and slot \, we give one transposition +value for each attack; +#X obj 40 903 s dmach-msgs; +#X msg 40 878 slotamps 5 2 10 1 0.7 0.7 0.7 0.7 1 0.7 0.7 1 0.7; +#X msg 38 761 slotincrs 5 1 0.8333 1 0.8333 1.25 1 1.11; +#X msg 42 665 slotamps 5 1 8 1 0 1 0.7 0 1 1 0.7; +#X text 42 933 8 We'll emphasize the pattern with transposition; +#X obj 45 982 s dmach-msgs; +#X obj 49 1061 s dmach-msgs; +#X msg 49 1036 slotamps 5 8 8 0 0 1 0 0 1 0 0.8; +#X obj 50 1195 s dmach-msgs; +#X msg 49 1142 slotincrs 5 4 150 133 125 133; +#X msg 269 1143 slotamps 5 4 4 1 1 1 1; +#X obj 220 1115 t b b; +#X obj 221 1089 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X text 36 444 4 Now let's add a snare part.; +#X text 35 378 The arguments are: bar number \, slot number (in this +patch slot 6 is driving a bass drum) \, bar subdivision (this must +be an integer) and an attack pattern with numbers corresponding to +amplitude (zero of course is a rest).; +#X text 38 847 7 Let's add some quintuplet cymbals.; +#X text 43 1005 9 A couple claps.; +#X text 45 1089 10 Finally a bass line.; +#X text 164 1186 Note the order of messaging. A slotamps message sets +all its increments to 1 so the slotincrs message must come after it. +; +#X text 36 528 5 Add the hihat fill.; +#X msg 44 957 slotincrs 5 2 1.1 0.8 0.8 0.8 0.8 1 0.8 0.8 1.2 0.8; +#X text 47 1252 If you want to effect more complex subdivisions of +the bar \, read my paper for instructions on how to do that.; +#X connect 3 0 2 0; +#X connect 5 0 7 0; +#X connect 9 0 10 0; +#X connect 12 0 11 0; +#X connect 14 0 13 0; +#X connect 21 0 20 0; +#X connect 22 0 18 0; +#X connect 23 0 15 0; +#X connect 27 0 26 0; +#X connect 29 0 28 0; +#X connect 30 0 28 0; +#X connect 31 0 29 0; +#X connect 31 1 30 0; +#X connect 32 0 31 0; +#X connect 40 0 25 0; +#X restore 386 235 pd pattern-tutorial; +#X text 215 205 pattern downbeat; +#N canvas 0 22 677 332 playback 0; +#X obj 10 285 s dmach-msgs; +#X msg 218 97 recall \$1; +#X msg 219 41 0; +#X msg 256 41 1; +#X msg 300 97 nosequence; +#X msg 299 41 2; +#X msg 335 41 3; +#X msg 373 41 4; +#X msg 195 193 loopsequence 0 0 0 1 0 0 1 1 2 2 2 2 3 0 0 0 0 3 3 4 +2 2 3 4 4 4 1 4 3 3 3; +#X obj 195 148 loadbang; +#X msg 11 203 playsequence 3 4 3 4; +#X text 11 175 play one time only; +#X text 337 73 select a stored pattern; +#X text 283 170 loop a pattern sequence; +#X obj 217 122 s dmach-msgs; +#X obj 218 73 t f b; +#X text 170 252 another sequence; +#X text 378 98 this turns off sequencer mode; +#X msg 152 267 loopsequence 1 1 1 3 1 1 4 6 4 6 6 3 4 1 1 1 6 6 6 6 +6 6 6 6 6; +#X obj 195 169 delay 100; +#X msg 406 41 5; +#X msg 439 41 6; +#X connect 1 0 14 0; +#X connect 2 0 15 0; +#X connect 3 0 15 0; +#X connect 4 0 14 0; +#X connect 5 0 15 0; +#X connect 6 0 15 0; +#X connect 7 0 15 0; +#X connect 8 0 0 0; +#X connect 9 0 19 0; +#X connect 10 0 0 0; +#X connect 15 0 1 0; +#X connect 15 1 4 0; +#X connect 18 0 0 0; +#X connect 19 0 8 0; +#X connect 20 0 15 0; +#X connect 21 0 15 0; +#X restore 386 99 pd playback; +#N canvas 180 306 425 213 stored-patterns 0; +#X msg 264 79 printraw 0; +#X msg 142 78 listraw 0; +#N canvas 0 22 1033 649 pat0 0; +#X obj 92 588 s dmach-msgs; +#X msg 210 111 store 0 4; +#X msg 15 188 slotamps 0 0 8 1 0 0 1 1 0 0 1; +#X msg 14 164 slotincrs 0 0 1 0.8 1 0.8; +#X msg 268 151 slotamps 0 2 16 0 0 1 0.7 0 0 1 0.7 0 0 1 0.7 0 0.5 +1 0.7; +#X msg 252 211 slotamps 0 3 4 0 1 0 1; +#X obj 15 142 t b b; +#X obj 86 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 339 289 t b b; +#X msg 341 344 slotamps 0 1 16 1 0 0.7 0 1 0 0 1 0 0 1 0 1 0 0.666 +; +#X msg 339 325 slotincrs 0 1 1 1 0.8333 1.111 1.111 1.333 1.653; +#X msg 238 454 slotamps 0 4 8 1 0 0 1 1 0 0 1; +#X msg 231 432 slotincrs 0 4 60 222 66.6 88.65; +#X msg 179 491 slotamps 0 5 4 1 1 1 1; +#X msg 155 511 slotincrs 0 5 1.05 1.05 1 0.9; +#X msg 424 225 slotamps 0 3 16 0 0 0 0 1 1 0 1 1 0 0.5 0.7 0.9 1 1 +1; +#X obj 162 435 t b b; +#X obj 145 55 loadbang; +#X obj 221 372 t b b; +#X obj 67 84 t b b b b b b; +#X text 444 210 snare rush; +#X text 263 194 normal snare; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 3 0; +#X connect 6 1 2 0; +#X connect 7 0 19 0; +#X connect 8 0 10 0; +#X connect 8 1 9 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 14 0; +#X connect 16 1 13 0; +#X connect 17 0 7 0; +#X connect 18 0 12 0; +#X connect 18 1 11 0; +#X connect 19 0 6 0; +#X connect 19 1 5 0; +#X connect 19 1 16 0; +#X connect 19 2 4 0; +#X connect 19 3 8 0; +#X connect 19 4 18 0; +#X connect 19 5 1 0; +#X restore 20 30 pd pat0; +#N canvas 551 229 733 551 pat1 0; +#X msg 165 57 store 1 3.5; +#X obj 178 229 s dmach-msgs; +#X msg 373 203 slotamps 1 3 14 0 0 0 0 1 0 0 0 0 0 1 1 1 0; +#X msg 405 290 slotamps 1 7 14 1 1 1 1 1 0 0 0 1 0 1 0 1 0; +#X msg 450 339 slotamps 1 2 7 0 0 0 1 0 0 0; +#X msg 341 153 slotamps 1 6 7 1 0 0 1 0 0.6 0; +#X msg 264 73 slotincrs 1 6 1 0.9 0.6; +#X msg 5 448 slotamps 1 4 14 1 0 0 1 1 1 1 0 1 1 1 1 1 0; +#X msg 6 427 slotincrs 1 4 80 90 300 120 600 70 111 131 210 60; +#X msg 398 249 slotamps 1 8 7 0 1 0.7 0 1 0.7 0; +#X msg 272 92 slotamps 1 1 0 0 0 1 0 1 0 1; +#X obj 148 401 t b b; +#X obj 278 46 t b b; +#X obj 140 22 t b b b b b b b b b; +#X obj 93 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 53 0 loadbang; +#X msg 424 392 slotamps 1 8 7 1 1 1 0 0 0 0; +#X connect 0 0 1 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 1 0; +#X connect 6 0 1 0; +#X connect 7 0 1 0; +#X connect 8 0 1 0; +#X connect 9 0 1 0; +#X connect 10 0 1 0; +#X connect 11 0 8 0; +#X connect 11 1 7 0; +#X connect 12 0 6 0; +#X connect 12 1 10 0; +#X connect 13 0 11 0; +#X connect 13 1 16 0; +#X connect 13 2 4 0; +#X connect 13 3 3 0; +#X connect 13 4 9 0; +#X connect 13 5 2 0; +#X connect 13 6 5 0; +#X connect 13 7 12 0; +#X connect 13 8 0 0; +#X connect 14 0 13 0; +#X connect 15 0 14 0; +#X connect 16 0 1 0; +#X restore 19 55 pd pat1; +#N canvas 85 193 1049 665 pat2 0; +#X obj 92 588 s dmach-msgs; +#X obj 15 142 t b b; +#X obj 86 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 339 289 t b b; +#X obj 162 435 t b b; +#X obj 145 55 loadbang; +#X obj 221 372 t b b; +#X text 444 210 snare rush; +#X text 263 194 normal snare; +#X msg 210 111 store 2 4; +#X msg 268 151 slotamps 2 2 16 0 0 1 0.7 0 0 1 0.7 0 0 1 0.7 0 0.5 +1 0.7; +#X msg 245 249 slotamps 2 3 4 0 1 0 1; +#X msg 424 225 slotamps 2 3 16 0 0 0 0 1 1 0 1 1 0 0.5 0.7 0.9 1 1 +1; +#X msg 339 325 slotincrs 2 1 1 1 0.8333 1.111 1.111 1.333 1.653; +#X msg 341 345 slotamps 2 1 16 1 0 0.7 0 1 0 0 1 0 0 1 0 1 0 0.666 +; +#X msg 15 188 slotamps 2 0 8 1 0 0 1 1 0 0 1; +#X msg 14 164 slotincrs 2 0 1 0.8 1 0.8; +#X obj 67 84 t b b b b b b b b; +#X msg 142 521 slotincrs 2 6 1.05 1.05 0.9 1 0.8; +#X msg 177 492 slotamps 2 6 16 1 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0; +#X msg 532 470 slotamps 2 8 16 1 0.9 0.8 0.6 1 0.9 0.8 0.6 1 0.9 0.8 +0.6 1 0.9 0.8 0.6; +#X msg 283 455 slotamps 2 4 2 1 1; +#X msg 229 431 slotincrs 2 4 555 597; +#X connect 1 0 16 0; +#X connect 1 1 15 0; +#X connect 2 0 17 0; +#X connect 3 0 13 0; +#X connect 3 1 14 0; +#X connect 4 0 18 0; +#X connect 4 1 19 0; +#X connect 5 0 2 0; +#X connect 6 0 22 0; +#X connect 6 1 21 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 0 0; +#X connect 17 0 1 0; +#X connect 17 1 4 0; +#X connect 17 2 10 0; +#X connect 17 3 3 0; +#X connect 17 4 6 0; +#X connect 17 5 11 0; +#X connect 17 6 20 0; +#X connect 17 7 9 0; +#X connect 18 0 0 0; +#X connect 19 0 0 0; +#X connect 20 0 0 0; +#X connect 21 0 0 0; +#X connect 22 0 0 0; +#X restore 19 85 pd pat2; +#N canvas 368 153 785 643 pat3 0; +#X obj 154 226 s dmach-msgs; +#X msg 177 120 store 3 3; +#X msg 338 153 slotamps 3 0 9 1 0 0.7 1 0 0.7 1 0 0; +#X msg 398 213 slotamps 3 8 9 0 1 0.5 0 1 0.5 0 0.5 1; +#X msg 399 249 slotincrs 3 8 0.7 0.7 0.7 0.7 0.7 0.6; +#X msg 347 323 slotamps 3 7 18 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 +; +#X msg 414 356 slotamps 3 2 3 1 1 1; +#X msg 264 423 slotamps 3 4 9 1 1 1 1 1 1 1 1 1; +#X msg 272 466 slotincrs 3 4 89 111 127 76 140 222 997 560 56; +#X obj 250 60 t b b b b b b; +#X obj 374 189 t b b; +#X obj 304 375 t b b; +#X obj 221 53 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 124 63 loadbang; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 11 0; +#X connect 9 1 6 0; +#X connect 9 2 5 0; +#X connect 9 3 10 0; +#X connect 9 4 2 0; +#X connect 9 5 1 0; +#X connect 10 0 4 0; +#X connect 10 1 3 0; +#X connect 11 0 8 0; +#X connect 11 1 7 0; +#X connect 12 0 9 0; +#X connect 13 0 12 0; +#X restore 17 110 pd pat3; +#N canvas 383 180 805 663 pat4 0; +#X obj 134 585 s dmach-msgs; +#X msg 177 119 store 4 3.33333; +#X msg 361 513 slotamps 4 4 10 1 1 1 1 1 1 1 1 1 1; +#X msg 338 153 slotamps 4 0 10 1 0 0.7 1 0 0.7 1 0 1 0; +#X msg 385 243 slotamps 4 8 10 0 1 0.5 0 1 0.5 0 0.5 1 1; +#X msg 355 221 slotincrs 4 8 0.7 0.7 0.7 0.7 0.7 0.6 0.55; +#X msg 347 322 slotamps 4 7 20 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 +1 1; +#X msg 420 356 slotamps 4 2 10 1 0 0 1 0 0 1 0 0 1 0 1 0; +#X msg 337 490 slotincrs 4 4 89 111 127 76 140 222 997 560 333 1444 +; +#X obj 359 189 t b b; +#X obj 349 459 t b b; +#X obj 184 43 t b b b b b b; +#X text 314 111 A bar with 10 triplets (hard to notate!); +#X obj 135 56 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 110 25 loadbang; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 5 0; +#X connect 9 1 4 0; +#X connect 10 0 8 0; +#X connect 10 1 2 0; +#X connect 11 0 10 0; +#X connect 11 1 7 0; +#X connect 11 2 6 0; +#X connect 11 3 9 0; +#X connect 11 4 3 0; +#X connect 11 5 1 0; +#X connect 13 0 11 0; +#X connect 14 0 13 0; +#X restore 18 137 pd pat4; +#X text 271 63 print ptn 0; +#X text 85 60 send ptn 0 to list outlet; +#X text 11 12 pattern assembly; +#X obj 265 106 s dmach-msgs; +#N canvas 328 128 821 601 pat6 0; +#X obj -9 526 s dmach-msgs; +#X msg 571 34 store 6 3.25; +#X msg 37 76 slotamps 6 0 13 1 0 0 0 1 0 0 1 0 0 1 0 0; +#X msg 31 221 slotamps 6 2 13 1 0 0 0 1 0 0 1 0 0 1 0 0; +#X msg 108 30 slotamps 6 6 13 1 0 0 0 0 0 0 0 0 1 0 1 0; +#X msg 35 366 slotamps 6 1 13 1 0 1 0 0 0 1 0 0 0 1 0 0; +#X msg 30 337 slotincrs 6 1 0.5 1.5 2 1; +#X msg 118 493 slotamps 6 4 13 1 0.7 0.7 0.7 1 0.5 0.5 1 0.5 0.5 1 +0.5 0.5; +#X msg 143 457 slotincrs 6 4 80 160 320 640 160 320 640 80 160 320 +160 320 640; +#X msg 156 140 slotamps 6 3 13 0 0 1 1 0 0 0 1 0 1 0 0 1.5; +#X msg 67 259 slotamps 6 7 13 0 0 1 1 0 1 1 0 1 1 0 1 1.3; +#X msg 149 191 slotamps 6 5 13 0 0 0 0 1 0 0 0 0 0 0 0 1.2; +#X msg 424 264 slotamps 6 8 13 0 0 0 0 1 0 0 0 0 0 0 0 1.2; +#X msg 405 242 slotincrs 6 8 1 1.06; +#X obj 22 -51 loadbang; +#X obj 246 424 t b b; +#X obj 138 304 t b b; +#X obj 414 219 t b b; +#X text 573 9 13/16 bar; +#X obj 24 -12 t b b b b b b b b b b; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 19 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 16 0 6 0; +#X connect 16 1 5 0; +#X connect 17 0 13 0; +#X connect 17 1 12 0; +#X connect 19 0 15 0; +#X connect 19 1 16 0; +#X connect 19 2 10 0; +#X connect 19 3 3 0; +#X connect 19 4 17 0; +#X connect 19 5 11 0; +#X connect 19 6 9 0; +#X connect 19 7 4 0; +#X connect 19 8 2 0; +#X connect 19 9 1 0; +#X restore 141 163 pd pat6; +#X connect 0 0 10 0; +#X connect 1 0 10 0; +#X restore 386 126 pd stored-patterns; +#N canvas 252 329 755 357 playback-adjustments 0; +#X obj 606 67 s dmach-msgs; +#X obj 77 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 101 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 125 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 149 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 172 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 220 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 251 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 282 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 315 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 345 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X msg 55 140 1; +#X obj 376 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 194 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 408 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 441 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#X obj 470 35 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 +-1 -1 0 1; +#N canvas 19 93 1162 506 adjust-gains__________________________ 0; +#X obj 81 215 outlet; +#X obj 83 71 inlet; +#X floatatom 82 128 5 0 0 0 - - -, f 5; +#X msg 82 156 gain 0 \$1; +#X obj 169 67 inlet; +#X floatatom 168 124 5 0 0 0 - - -, f 5; +#X obj 258 67 inlet; +#X floatatom 257 124 5 0 0 0 - - -, f 5; +#X obj 352 68 inlet; +#X floatatom 351 125 5 0 0 0 - - -, f 5; +#X obj 447 71 inlet; +#X floatatom 446 128 5 0 0 0 - - -, f 5; +#X msg 168 152 gain 1 \$1; +#X msg 257 152 gain 2 \$1; +#X msg 351 153 gain 3 \$1; +#X msg 446 156 gain 4 \$1; +#X obj 532 72 inlet; +#X floatatom 531 129 5 0 0 0 - - -, f 5; +#X msg 532 157 gain 5 \$1; +#X obj 531 103 smap 0 4; +#X obj 626 74 inlet; +#X floatatom 625 131 5 0 0 0 - - -, f 5; +#X obj 625 105 smap 0 4; +#X msg 626 159 gain 6 \$1; +#X obj 704 75 inlet; +#X floatatom 703 132 5 0 0 0 - - -, f 5; +#X obj 703 106 smap 0 4; +#X msg 704 159 gain 7 \$1; +#X obj 788 77 inlet; +#X floatatom 787 134 5 0 0 0 - - -, f 5; +#X obj 787 108 smap 0 4; +#X msg 788 161 gain 8 \$1; +#X obj 888 78 inlet; +#X obj 447 102 smap 0 4; +#X obj 352 99 smap 0 4; +#X obj 258 98 smap 0 4; +#X obj 169 98 smap 0 4; +#X obj 83 102 smap 0 4; +#X connect 1 0 37 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 36 0; +#X connect 5 0 12 0; +#X connect 6 0 35 0; +#X connect 7 0 13 0; +#X connect 8 0 34 0; +#X connect 9 0 14 0; +#X connect 10 0 33 0; +#X connect 11 0 15 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 14 0 0 0; +#X connect 15 0 0 0; +#X connect 16 0 19 0; +#X connect 17 0 18 0; +#X connect 18 0 0 0; +#X connect 19 0 17 0; +#X connect 20 0 22 0; +#X connect 21 0 23 0; +#X connect 22 0 21 0; +#X connect 23 0 0 0; +#X connect 24 0 26 0; +#X connect 25 0 27 0; +#X connect 26 0 25 0; +#X connect 27 0 0 0; +#X connect 28 0 30 0; +#X connect 29 0 31 0; +#X connect 30 0 29 0; +#X connect 31 0 0 0; +#X connect 32 0 29 0; +#X connect 32 0 25 0; +#X connect 32 0 21 0; +#X connect 32 0 17 0; +#X connect 32 0 11 0; +#X connect 32 0 9 0; +#X connect 32 0 7 0; +#X connect 32 0 5 0; +#X connect 32 0 2 0; +#X connect 33 0 11 0; +#X connect 34 0 9 0; +#X connect 35 0 7 0; +#X connect 36 0 5 0; +#X connect 37 0 2 0; +#X restore 221 101 pd adjust-gains__________________________; +#X msg 503 49 1; +#X obj 220 128 s dmach-msgs; +#X obj 53 267 s dmach-msgs; +#N canvas 241 125 1002 464 gates 0; +#X obj 96 342 outlet; +#X obj 136 58 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 134 99 muteslot 1 \$1; +#X obj 238 65 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 237 99 muteslot 2 \$1; +#X obj 34 56 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 33 97 muteslot 0 \$1; +#X obj 343 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 447 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 547 63 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 342 98 muteslot 3 \$1; +#X msg 445 98 muteslot 4 \$1; +#X msg 546 97 muteslot 5 \$1; +#X obj 561 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 665 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 765 175 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 560 209 muteslot 6 \$1; +#X msg 663 210 muteslot 7 \$1; +#X msg 764 209 muteslot 8 \$1; +#X text 247 363 turn slots on or off; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 7 0 10 0; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X connect 13 0 16 0; +#X connect 14 0 17 0; +#X connect 15 0 18 0; +#X connect 16 0 0 0; +#X connect 17 0 0 0; +#X connect 18 0 0 0; +#X restore 606 37 pd gates; +#X obj 218 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 243 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#X obj 265 168 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 +-1 -1 0 1; +#N canvas 0 156 1248 402 transposers_________________ 0; +#X obj 49 49 inlet; +#N canvas 1157 45 458 308 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 49 80 pd zmap; +#X floatatom 48 106 5 0 0 0 - - -, f 5; +#X msg 48 134 transpose 0 \$1; +#X obj 47 180 outlet; +#X obj 168 48 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 168 79 pd zmap; +#X floatatom 167 105 5 0 0 0 - - -, f 5; +#X obj 284 46 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 284 77 pd zmap; +#X floatatom 283 103 5 0 0 0 - - -, f 5; +#X obj 394 48 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 394 79 pd zmap; +#X floatatom 393 105 5 0 0 0 - - -, f 5; +#X obj 509 49 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 509 80 pd zmap; +#X floatatom 509 106 5 0 0 0 - - -, f 5; +#X msg 167 133 transpose 1 \$1; +#X msg 283 131 transpose 2 \$1; +#X msg 393 133 transpose 3 \$1; +#X msg 509 134 transpose 4 \$1; +#X obj 3 47 inlet; +#X obj 622 48 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 622 79 pd zmap; +#X floatatom 622 105 5 0 0 0 - - -, f 5; +#X msg 622 134 transpose 5 \$1; +#X obj 732 48 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 732 79 pd zmap; +#X floatatom 732 105 5 0 0 0 - - -, f 5; +#X obj 846 54 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 846 85 pd zmap; +#X floatatom 846 111 5 0 0 0 - - -, f 5; +#X obj 967 52 inlet; +#N canvas 1157 45 454 304 zmap 0; +#X obj 56 34 inlet; +#X obj 56 60 / 127; +#X msg 139 43 0.5; +#X msg 181 43 1.5; +#X obj 138 78 - 0; +#X obj 140 20 t b b; +#X floatatom 96 111 5 0 0 0 - - -, f 5; +#X obj 56 131 *; +#X obj 56 160 +; +#X floatatom 103 142 5 0 0 0 - - -, f 5; +#X obj 56 187 outlet; +#X obj 140 -1 loadbang; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 2 0 4 1; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 7 1; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 9 0 8 1; +#X connect 11 0 5 0; +#X restore 967 83 pd zmap; +#X floatatom 967 109 5 0 0 0 - - -, f 5; +#X msg 732 134 transpose 6 \$1; +#X msg 846 140 transpose 7 \$1; +#X msg 967 138 transpose 8 \$1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 17 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 18 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 13 0 19 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 16 0 20 0; +#X connect 17 0 4 0; +#X connect 18 0 4 0; +#X connect 19 0 4 0; +#X connect 20 0 4 0; +#X connect 21 0 2 0; +#X connect 21 0 7 0; +#X connect 21 0 10 0; +#X connect 21 0 13 0; +#X connect 21 0 16 0; +#X connect 21 0 24 0; +#X connect 22 0 23 0; +#X connect 23 0 24 0; +#X connect 24 0 25 0; +#X connect 25 0 4 0; +#X connect 26 0 27 0; +#X connect 27 0 28 0; +#X connect 28 0 35 0; +#X connect 29 0 30 0; +#X connect 30 0 31 0; +#X connect 31 0 36 0; +#X connect 32 0 33 0; +#X connect 33 0 34 0; +#X connect 34 0 37 0; +#X connect 35 0 4 0; +#X connect 36 0 4 0; +#X connect 37 0 4 0; +#X restore 54 239 pd transposers_________________; +#X connect 1 0 25 1; +#X connect 2 0 25 2; +#X connect 3 0 25 3; +#X connect 4 0 25 4; +#X connect 5 0 25 5; +#X connect 6 0 17 0; +#X connect 7 0 17 1; +#X connect 8 0 17 2; +#X connect 9 0 17 3; +#X connect 10 0 17 4; +#X connect 11 0 25 0; +#X connect 12 0 17 5; +#X connect 13 0 25 6; +#X connect 14 0 17 6; +#X connect 15 0 17 7; +#X connect 16 0 17 8; +#X connect 17 0 19 0; +#X connect 18 0 17 9; +#X connect 21 0 0 0; +#X connect 22 0 25 7; +#X connect 23 0 25 8; +#X connect 24 0 25 9; +#X connect 25 0 20 0; +#X restore 386 180 pd playback-adjustments; +#X text 20 48 dmach~ coordinates click triggers and increment signals +for pattern-based sequencing., f 91; +#X text 243 110 args: tempo \, voices; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 24 336 http://disis.music.vt.edu/eric/LyonPapers/SampleAccurate-Lyon-ICMC2006.pdf +, f 75; +#X text 23 319 See this paper for more information:; +#X connect 0 0 1 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 4 0 11 0; +#X connect 6 0 2 1; +#X connect 10 0 7 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 11 2 12 2; +#X connect 11 3 12 3; +#X connect 11 4 12 4; +#X connect 11 5 12 5; +#X connect 11 6 12 6; +#X connect 11 7 12 7; +#X connect 11 8 12 8; +#X connect 11 9 12 9; +#X connect 11 10 12 10; +#X connect 11 11 12 11; +#X connect 11 12 12 12; +#X connect 11 13 12 13; +#X connect 11 14 12 14; +#X connect 11 15 12 15; +#X connect 11 16 12 16; +#X connect 11 17 12 17; +#X connect 11 18 0 0; +#X connect 11 19 8 0; +#X connect 12 0 2 0; diff --git a/externals/lyonpotpourri/dmach~.c b/externals/lyonpotpourri/dmach~.c new file mode 100755 index 000000000..1bf1422ac --- /dev/null +++ b/externals/lyonpotpourri/dmach~.c @@ -0,0 +1,1225 @@ +#include "MSPd.h" + +#define MAX_ATTACKS (512) +#define MAX_PATTERNS (1024) + + +#define OBJECT_NAME "dmach~" + + +static t_class *dmach_class; + + +typedef struct +{ + float trigger_point; + float increment; + float amplitude; +} t_attack; + +typedef struct +{ + short active; // flag for if this drum slot is used in current pattern + int attack_count; // number of attacks in this pattern + int adex; // index to current attack + t_attack *attacks; // array containing attack data +} t_drumline; + +typedef struct +{ + float beats; // how many beats in this pattern + float dsamps; //duration of pattern in samples + t_drumline *drumlines; +} t_pattern; + +typedef struct _dmach +{ + + t_object x_obj; + float x_f; + + short mute; // global mute + float clocker; // global sample counter clock + float tempo; + float tempo_factor; // multiplier to get actual beat duration + t_pattern *patterns; // contains all drum patterns + short *stored_patterns;// which locations contain a pattern + float *gtranspose;// transpose factor for each individual drum slot + float *gains; // gain factor for each individual drum slot + float *current_increment;// maintains increment for sustained output + int this_pattern; // number of current pattern + int next_pattern; // number of pattern to call at end of current pattern + float global_gain; + float global_transpose; + float sr; + int drum_count; // number of drum slots to instantiate + int outlet_count; // number of outlets on object + short virgin; // no patterns stored - turn off performance + /* sequencer */ + short playsequence; // flag to play through a stored sequence once + short loopsequence; // flag to loop repeatedly through sequence + int *sequence; // contains the sequence of bars to play + int sequence_length; // how many bars are stored in sequence + int seqptr; // keep track of current sequencer position + float zeroalias; // use this to send a coded "zero" message (i.e. bar number is zero) + t_atom *listdata; // for list output + void *listraw_outlet;// send a list + short clickincr; //flag that click increment is on (i.e. no sample and hold) + short *attackpattern; // holds full attack sequence including zeros (for list output) + int attackpattern_count;// how many ticks in attack pattern + t_attack *tmpatks; // hold local copy of new slot pattern + short *connected; // list of vector connections + short *muted; // state of each slot + short instant_recall; // flag that pattern gets loaded immediately (loops only) +} t_dmach; + +void dmach_store(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void *dmach_new(t_symbol *s, int argc, t_atom *argv); +t_int *dmach_perform(t_int *w); +void dmach_mute(t_dmach *x, t_floatarg toggle); +void dmach_dsp(t_dmach *x, t_signal **sp); +void dmach_dsp_free(t_dmach *x); +void dmach_init_pattern(t_dmach *x, int pnum); +void dmach_show(t_dmach *x, t_floatarg fn); +void dmach_tempo(t_dmach *x, t_floatarg new_tempo); +void dmach_recall(t_dmach *x, t_floatarg pnf); +void dmach_transpose(t_dmach *x, t_floatarg slotf, t_floatarg new_transpose_factor); +void dmach_gain(t_dmach *x, t_floatarg slotf, t_floatarg new_gain_factor); +void dmach_arm(t_dmach *x, t_floatarg pnf); +void dmach_playsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_slotamps(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_printraw(t_dmach *x, t_floatarg fn); +void dmach_readraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_slotincrs(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_loopsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_muteslot(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_slotampsfull(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_nosequence(t_dmach *x); +void dmach_copypattern(t_dmach *x, t_floatarg pn1, t_floatarg pn2); +void dmach_listraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv); +void dmach_clickincr(t_dmach *x, t_floatarg toggle); +void dmach_instant_recall(t_dmach *x, t_floatarg toggle); + + + + +void dmach_tilde_setup(void){ + dmach_class = class_new(gensym("dmach~"), (t_newmethod)dmach_new, + (t_method)dmach_dsp_free,sizeof(t_dmach), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(dmach_class, t_dmach, x_f); + class_addmethod(dmach_class,(t_method)dmach_dsp,gensym("dsp"),0); + class_addmethod(dmach_class,(t_method)dmach_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_show,gensym("show"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_tempo,gensym("tempo"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_store,gensym("store"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_recall,gensym("recall"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_transpose,gensym("transpose"),A_FLOAT,A_FLOAT, 0); + class_addmethod(dmach_class,(t_method)dmach_gain,gensym("gain"),A_FLOAT,A_FLOAT, 0); + class_addmethod(dmach_class,(t_method)dmach_printraw,gensym("printraw"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_arm,gensym("arm"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_readraw,gensym("readraw"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_listraw,gensym("listraw"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_playsequence,gensym("playsequence"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_slotamps,gensym("slotamps"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_slotampsfull,gensym("slotampsfull"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_slotincrs,gensym("slotincrs"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_loopsequence,gensym("loopsequence"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_muteslot,gensym("muteslot"),A_GIMME,0); + class_addmethod(dmach_class,(t_method)dmach_nosequence,gensym("nosequence"),0); + class_addmethod(dmach_class,(t_method)dmach_copypattern,gensym("copypattern"),A_FLOAT,A_FLOAT, 0); + class_addmethod(dmach_class,(t_method)dmach_clickincr,gensym("clickincr"),A_FLOAT,0); + class_addmethod(dmach_class,(t_method)dmach_instant_recall,gensym("instant_recall"),A_FLOAT,0); + + potpourri_announce(OBJECT_NAME); +} + + +void dmach_muteslot(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int slot; + int drum_count = x->drum_count; + short mutestate; + + if(argc < 2){ + post("muteslot: pattern number, slot number"); + return; + } + + slot = (int)atom_getfloatarg(0,argc,argv); + mutestate = (short)atom_getfloatarg(1,argc,argv); + + + if(slot < 0 || slot > drum_count - 1){ + error("muteslot: illegal slot index: %d",slot); + return; + } + x->muted[slot] = mutestate; +} + +void dmach_nosequence(t_dmach *x) +{ + x->playsequence = 0; + x->loopsequence = 0; +} + +void dmach_playsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + int pnum; + + if(argc < 1){ + error("%s: zero length sequence",OBJECT_NAME); + return; + } + /* need safety check here */ + for(i = 0; i < argc; i++){ + pnum = (int) atom_getfloatarg(i,argc,argv); + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + } + + for(i = 0; i < argc; i++){ + x->sequence[i] = (int) atom_getfloatarg(i,argc,argv); + } + + // + + + if(x->instant_recall){ + x->this_pattern = x->sequence[0]; + x->clocker = x->patterns[x->this_pattern].dsamps; + } else { + x->next_pattern = x->sequence[0]; + } + + x->mute = 0; + x->playsequence = 1; + x->loopsequence = 0; + x->sequence_length = argc; + x->seqptr = 0; +} +void dmach_loopsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + int pnum; + + if(argc < 1){ + error("%s: zero length sequence",OBJECT_NAME); + return; + } + + for(i = 0; i < argc; i++){ + pnum = (int) atom_getfloatarg(i,argc,argv); + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + } + + for(i = 0; i < argc; i++){ + x->sequence[i] = (int) atom_getfloatarg(i,argc,argv); + } + + if(x->instant_recall){ + x->this_pattern = x->sequence[0]; + x->clocker = x->patterns[x->this_pattern].dsamps; + } else { + x->next_pattern = x->sequence[0]; + } + + x->mute = 0; + x->playsequence = 1; + x->loopsequence = 1; + x->sequence_length = argc; + x->seqptr = 0; +} + +void dmach_gain(t_dmach *x, t_floatarg slotf, t_floatarg new_gain_factor) +{ + int slot = slotf; + // float ratio; + // float gain_factor; + // short *stored_patterns = x->stored_patterns; + float *gains = x->gains; + // t_pattern *p = x->patterns; + int drum_count = x->drum_count; + // int i,j,k; + + if(slot < 0 || slot > drum_count - 1){ + error("illegal slot index: %d",slot); + return; + } + /* if(new_gain_factor <= 0){ + error("illegal gain factor %f", new_gain_factor); + return; + } */ + // gain_factor = gains[slot]; + // ratio = new_gain_factor / gain_factor; + gains[slot] = new_gain_factor; +} + +void dmach_transpose(t_dmach *x, t_floatarg slotf, t_floatarg new_transpose_factor) +{ + int slot = slotf; + float *gtranspose = x->gtranspose; + int drum_count = x->drum_count; + + if(slot < 0 || slot > drum_count - 1){ + error("%s: transpose given illegal slot index: %d",OBJECT_NAME, slot); + return; + } + if(new_transpose_factor == 0){ + error("illegal transpose factor %f", new_transpose_factor); + return; + } + gtranspose[slot] = new_transpose_factor; + +} + + +void dmach_recall(t_dmach *x, t_floatarg pnf) +{ + int pnum = pnf; + + /* post("requested recall of %d, ignored",pnum); + return;*/ + if(pnum < 0){ + error("requested index is less than zero"); + return; + } + if(pnum >= MAX_PATTERNS){ + error("requested index is greater than the maximum of %d",MAX_PATTERNS-1); + return; + } + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + // x->this_pattern = x->next_pattern = pnum; + x->mute = 0; + x->next_pattern = pnum; +} + +void dmach_arm(t_dmach *x, t_floatarg pnf) +{ + int pnum = pnf; + int i; + t_pattern *p = x->patterns; + + if(pnum < 0){ + error("requested index is less than zero"); + return; + } + if(pnum > MAX_PATTERNS){ + error("%s: requested index is greater than the maximum of %d",OBJECT_NAME,MAX_PATTERNS-1); + return; + } + if(! x->stored_patterns[pnum]){ + error("%s: %d is not currently stored",OBJECT_NAME,pnum); + return; + } + x->mute = 1; + x->clocker = 0; + x->next_pattern = x->this_pattern = pnum; + for(i = 0; i < x->drum_count; i++){ /* reset pointers */ + p[x->this_pattern].drumlines[i].adex = 0; + } +} + + +void dmach_tempo(t_dmach *x, t_floatarg new_tempo) +{ + float ratio; + int i, j, k; + short *stored_patterns = x->stored_patterns; + t_pattern *p = x->patterns; + int drum_count = x->drum_count; + float sr = x->sr; + float tempo_factor = x->tempo_factor; + if(new_tempo <= 0.0){ + error("tempo must be greater than zero, but was %f",new_tempo); + return; + } + ratio = x->tempo / new_tempo; + x->clocker *= ratio; + x->tempo = new_tempo; + tempo_factor = (60.0/new_tempo); + + for(i = 0; i < MAX_PATTERNS; i++){ + if(stored_patterns[i]){ + p[i].dsamps = p[i].beats * tempo_factor * sr; + for(j = 0; j < drum_count; j++){ + if(p[i].drumlines[j].active){ + for(k = 0; k < p[i].drumlines[j].attack_count; k++){ + p[i].drumlines[j].attacks[k].trigger_point *= ratio; + } + } + } + } + } + x->tempo_factor = tempo_factor; +} +void dmach_show(t_dmach *x, t_floatarg fn) +{ + int i,j; + int pnum = (int) fn; + t_pattern *p = x->patterns; + t_attack *ptr; + int drum_count = x->drum_count; + + if(pnum < 0 || pnum > MAX_PATTERNS-1){ + error("illegal pattern number: %d",pnum); + return; + } + + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + post("showing pattern %d",pnum); + /* need to check if pattern is valid */ + + for(j = 0; j < drum_count; j++){ + if(p[pnum].drumlines[j].active){ + post("*** drum line for slot %d ***",j); + ptr = p[pnum].drumlines[j].attacks; + post("there are %d attacks",p[pnum].drumlines[j].attack_count); + for(i = 0; i < p[pnum].drumlines[j].attack_count; i++){ + post("amp: %f, transp: %f, trigger: %f", + ptr->amplitude, ptr->increment, ptr->trigger_point); + ptr++; + } + } + } +} + +void dmach_printraw(t_dmach *x, t_floatarg fn) +{ + int i,j; + int pnum = (int) fn; + t_pattern *p = x->patterns; + t_attack *ptr; + int drum_count = x->drum_count; + float normalized_trigger; + float tempo_factor = x->tempo_factor; + float sr = x->sr; + + if(pnum < 0 || pnum > MAX_PATTERNS-1){ + error("illegal pattern number: %d",pnum); + return; + } + + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + if(!tempo_factor){ + error("tempo factor is zero!"); + return; + } + + post("readraw %d %f",pnum, p[pnum].beats); + for(j = 0; j < drum_count; j++){ + if(p[pnum].drumlines[j].active){ + ptr = p[pnum].drumlines[j].attacks; + post("%d %d",j, p[pnum].drumlines[j].attack_count); + + for(i = 0; i < p[pnum].drumlines[j].attack_count; i++){ + /* scale attack times to factor out sample rate and tempo */ + normalized_trigger = ptr->trigger_point / (tempo_factor * sr); + post("%f %f %f", + ptr->amplitude, ptr->increment, normalized_trigger); + ptr++; + } + } + } +} + +void dmach_listraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int i,j; + int pnum; + t_pattern *p = x->patterns; + t_attack *ptr; + int drum_count = x->drum_count; + float normalized_trigger; + float tempo_factor = x->tempo_factor; + float sr = x->sr; + int ldex = 0; + t_atom *listdata = x->listdata; + + if(argc < 1){ + pnum = x->this_pattern; + } else { + pnum = (int) atom_getfloatarg(0,argc,argv); + } + if(pnum < 0 || pnum > MAX_PATTERNS-1){ + error("illegal pattern number: %d",pnum); + return; + } + + if(! x->stored_patterns[pnum]){ + error("%d is not currently stored",pnum); + return; + } + if(!tempo_factor){ + error("tempo factor is zero!"); + return; + } + + /* note: format of MACROS requires that ldex be incremented outside of + call. Also note that traditional indexing A[x] cannot be used; instead must + use A+x format. */ + + SETSYMBOL(listdata + ldex, gensym("readraw")); ++ldex; + + SETFLOAT(listdata + ldex, (float)pnum); ++ldex; + SETFLOAT(listdata + ldex, p[pnum].beats); ++ldex; + + for(j = 0; j < drum_count; j++){ + if(p[pnum].drumlines[j].active){ + ptr = p[pnum].drumlines[j].attacks; + SETFLOAT(listdata + ldex, (float)j); ++ldex; + SETFLOAT(listdata + ldex, (float)(p[pnum].drumlines[j].attack_count)); ++ldex; + + for(i = 0; i < p[pnum].drumlines[j].attack_count; i++){ + normalized_trigger = ptr->trigger_point / (tempo_factor * sr); + SETFLOAT(listdata + ldex, ptr->amplitude); ++ldex; + SETFLOAT(listdata + ldex, ptr->increment); ++ldex; + SETFLOAT(listdata + ldex, normalized_trigger); ++ldex; + ptr++; + } + } + } + outlet_list(x->listraw_outlet,0,ldex,listdata); +} + +void dmach_copypattern(t_dmach *x, t_floatarg pn1, t_floatarg pn2) +{ + int i,j; + int pnum_from = (int) pn1; + int pnum_to = (int) pn2; + t_pattern *p = x->patterns; + t_attack *ptr_from, *ptr_to; + int drum_count = x->drum_count; + + if(pnum_from < 0 || pnum_from > MAX_PATTERNS-1){ + error("illegal source pattern number: %d",pnum_from); + return; + } + if(pnum_to < 0 || pnum_to > MAX_PATTERNS-1){ + error("illegal dest pattern number: %d",pnum_to); + return; + } + if(pnum_from == pnum_to){ + error("source and dest patterns are the same"); + return; + } + if(! x->stored_patterns[pnum_from]){ + error("%d is not currently stored",pnum_from); + return; + } + dmach_init_pattern(x,pnum_to); + // post("readraw %d %f %f",pnum, p[pnum].beats, p[pnum].dsamps); + + p[pnum_to].beats = p[pnum_from].beats; + p[pnum_to].dsamps = p[pnum_from].dsamps; + + for(j = 0; j < drum_count; j++){ + p[pnum_to].drumlines[j].active = p[pnum_from].drumlines[j].active; + if(p[pnum_from].drumlines[j].active){ + ptr_from = p[pnum_from].drumlines[j].attacks; + ptr_to = p[pnum_to].drumlines[j].attacks; + p[pnum_to].drumlines[j].attack_count = p[pnum_from].drumlines[j].attack_count; + for(i = 0; i < p[pnum_from].drumlines[j].attack_count; i++){ + ptr_to->amplitude = ptr_from->amplitude; + ptr_to->increment = ptr_from->increment; + ptr_to->trigger_point = ptr_from->trigger_point; + ptr_from++; + ptr_to++; + } + } + } + x->stored_patterns[pnum_to] = 1;// assert that a legal pattern is now stored there +} + +void dmach_readraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int i; + int pnum; + int pdex = 0; + int slot; + t_pattern *p = x->patterns; + t_attack *ptr; + // int drum_count = x->drum_count; + float tempo_factor = x->tempo_factor; + float sr = x->sr; + short mutein; + + mutein = x->mute; + x->mute = 1; + pnum = (int) atom_getfloatarg(pdex++,argc,argv); + + + if(pnum < 0 || pnum > MAX_PATTERNS-1){ + error("%s: illegal pattern number: %d",OBJECT_NAME,pnum); + return; + } + + if(! x->stored_patterns[pnum]){ + x->stored_patterns[pnum] = 1; // means there's something there now + dmach_init_pattern(x,pnum); + post("readraw: loading pattern %d",pnum); + + } else { + post("readraw: reloading pattern %d",pnum); + } + p[pnum].beats = atom_getfloatarg(pdex++,argc,argv); + // p[pnum].dsamps = atom_getfloatarg(pdex++,argc,argv); + p[pnum].dsamps = p[pnum].beats * tempo_factor * sr; + // post("dsamps calculated to be %f", p[pnum].dsamps); + while(pdex < argc){ + slot = (int) atom_getfloatarg(pdex++,argc,argv); + p[pnum].drumlines[slot].active = 1; + p[pnum].drumlines[slot].attack_count = (int) atom_getfloatarg(pdex++,argc,argv); + p[pnum].drumlines[slot].adex = 0; + ptr = p[pnum].drumlines[slot].attacks; + for(i = 0; i < p[pnum].drumlines[slot].attack_count; i++){ + ptr->amplitude = atom_getfloatarg(pdex++,argc,argv); + ptr->increment = atom_getfloatarg(pdex++,argc,argv); + ptr->trigger_point = (sr * tempo_factor) * atom_getfloatarg(pdex++,argc,argv); + ptr++; + } + + } + x->this_pattern = x->next_pattern = pnum; + x->virgin = 0; + x->mute = mutein; +} + +void dmach_slotamps(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int pdex,i; + int slot = 0; + float beatseg; + // float tmpbeats; + float subdiv; + float beat_samps; + float tempo_factor; + int attack_count; + int local_attacks; + float trigger_point; + float val; + int pnum; + t_pattern *p = x->patterns; + float tempo = x->tempo; + float sr = x->sr; + t_attack *tmpatks = x->tmpatks; + + + + pdex = 0; + pnum = atom_getfloatarg(pdex++,argc,argv); + /* + post("skipping slotamps for %d",pnum); + return;*/ + + if(pnum < 0 || pnum > MAX_PATTERNS - 1){ + error("%s: invalid pattern number: %d",OBJECT_NAME,pnum); + return; + } + + if(!x->stored_patterns[pnum]){ + error("%s: no pattern found at location : %d",OBJECT_NAME,pnum); + return; + } + + slot = (int) atom_getfloatarg(pdex++,argc,argv); + if(slot < 0 || slot >= x->drum_count){ + post("%s: %d is an illegal slot",OBJECT_NAME,slot); + return; + } + // post("filling slotamps %d for %d",slot, pnum); + if(tempo <= 0){ + tempo = 60; + error("zero tempo found"); + } + tempo_factor = (60.0/tempo); + + beatseg = p[pnum].beats; // less general but we're going for ease here + subdiv = atom_getfloatarg(pdex++,argc,argv); + beat_samps = (beatseg/subdiv) * tempo_factor * sr; + trigger_point = 0; + attack_count = 0; + /* read attack cycle and store any non-zero attacks */ + local_attacks = 0; + // clean me + memset((void *)tmpatks, 0, MAX_ATTACKS * sizeof(t_attack) ); + + for(i = 0; i < subdiv; i++){ + val = atom_getfloatarg(pdex++,argc,argv); + if(val){ + tmpatks[local_attacks].amplitude = val; + // force to integer sample point + tmpatks[local_attacks].trigger_point = (int)trigger_point; + ++local_attacks; + } + trigger_point += beat_samps; + } + + /* initialize with increment of 1.0 for each non-zero amplitude attack. */ + for(i = 0; i < local_attacks; i++){ + if(tmpatks[i].amplitude) { + tmpatks[i].increment = 1.0; + } else { + tmpatks[i].increment = 0.0; + } + } + p[pnum].drumlines[slot].active = 0; + memcpy((void *)p[pnum].drumlines[slot].attacks,(void *)tmpatks, + MAX_ATTACKS * sizeof(t_attack)); + p[pnum].drumlines[slot].attack_count = local_attacks; + p[pnum].drumlines[slot].adex = 0; + p[pnum].drumlines[slot].active = 1; + x->this_pattern = x->next_pattern = pnum; // set pattern to what we're working on + + +} + + + +/* more general version */ +void dmach_slotampsfull(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int pdex,i; + int slot = 0; + float beatseg; + float tmpbeats; + float subdiv; + float beat_samps; + float tempo_factor; + int attack_count; + int local_attacks; + float trigger_point; + float val; + int pnum; + t_pattern *p = x->patterns; + float tempo = x->tempo; + float sr = x->sr; + + if(argc > MAX_ATTACKS + 1){ + post("%s: %d is too long an atk message",OBJECT_NAME,argc); + return; + } + pdex = 0; + pnum = atom_getfloatarg(pdex++,argc,argv); + + if(pnum < 0 || pnum > MAX_PATTERNS - 1){ + error("%s: invalid pattern number: %d",OBJECT_NAME,pnum); + return; + } + + if(!x->stored_patterns[pnum]){ + error("%s: no pattern found at location : %d",OBJECT_NAME,pnum); + return; + } + + x->this_pattern = x->next_pattern = pnum; // set current pattern to what we're working on + + slot = (int) atom_getfloatarg(pdex++,argc,argv); + p[pnum].drumlines[slot].active = 1; + tempo_factor = (60.0/tempo); + tmpbeats = p[pnum].beats; + + + trigger_point = 0; + attack_count = 0; + while(tmpbeats > 0){ + local_attacks = 0; + beatseg = atom_getfloatarg(pdex++,argc,argv); + subdiv = atom_getfloatarg(pdex++,argc,argv); + beat_samps = (beatseg/subdiv) * tempo_factor * sr; + /* read attack cycle and store any non-zero attacks */ + local_attacks = 0; + for(i = 0; i < subdiv; i++){ + val = atom_getfloatarg(pdex++,argc,argv); + if(val){ + p[pnum].drumlines[slot].attacks[attack_count + local_attacks].amplitude = val; + /* force to integer sample point (couldn't get round() to work) */ + p[pnum].drumlines[slot].attacks[attack_count + local_attacks].trigger_point = (int)trigger_point; + ++local_attacks; + } + trigger_point += beat_samps; + } + for(i = 0; i < local_attacks; i++){ + p[pnum].drumlines[slot].attacks[i + attack_count].increment = 1.0; + } + tmpbeats -= beatseg; + attack_count += local_attacks; + } + p[pnum].drumlines[slot].attack_count = attack_count; + +} + +void dmach_slotincrs(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int pdex,i; + int slot = 0; + int local_attacks; + int pnum; + t_pattern *p = x->patterns; + + if(argc > MAX_ATTACKS + 1){ + post("%s: %d is too long a slotincrs message",OBJECT_NAME,argc); + return; + } + pdex = 0; + pnum = (int) atom_getfloatarg(pdex++,argc,argv); + slot = (int) atom_getfloatarg(pdex++,argc,argv); + if(slot < 0 || slot >= x->drum_count){ + post("%s: %d is an illegal slot",OBJECT_NAME,slot); + return; + } + local_attacks = p[pnum].drumlines[slot].attack_count; + if(argc != local_attacks + 2){ + // post("rejected slotincrs with %d local atks, argc = %d",local_attacks, argc - 2); + return; + } + // post("%d local atks, argc = %d",local_attacks, argc); + + + if(pnum < 0 || pnum >= MAX_PATTERNS){ + error("%s: slotincrs sent invalid pattern number: %d",OBJECT_NAME,pnum); + return; + } + + if(!x->stored_patterns[pnum]){ + error("%s: slotincrs: no pattern found at location : %d",OBJECT_NAME,pnum); + return; + } + + + + + + // post("filling slotincr for slot %d pnum %d",slot, pnum); + + + + for(i = 0; i < local_attacks; i++){ + p[pnum].drumlines[slot].attacks[i].increment = atom_getfloatarg(pdex++,argc,argv); + } + x->this_pattern = x->next_pattern = pnum; // set current pattern to what we're working on + + // x->mute = mutein; +} + +void dmach_store(t_dmach *x, t_symbol *s, int argc, t_atom *argv) +{ + int pdex,i; + int slot = 0; + float beatseg; + float tmpbeats; + float subdiv; + float beat_samps; + float tempo_factor = x->tempo_factor; + int attack_count; + int local_attacks; + float trigger_point; + float val; + int pnum; + t_pattern *p = x->patterns; + float tempo = x->tempo; + float sr = x->sr; + + + + pnum = atom_getfloatarg(0,argc,argv); + if(pnum < 0 || pnum > MAX_PATTERNS - 1){ + error("invalid pattern number: %d",pnum); + return; + } + // post("%d arguments to \"store\" at pattern %d",argc,pnum); + + dmach_init_pattern(x,pnum); + + p[pnum].beats = atom_getfloatarg(1,argc,argv); + if(p[pnum].beats <= 0){ + post("illegal beats at pnum %d: %f",pnum,p[pnum].beats); + p[pnum].beats = 4; + } + if(tempo <= 0){ + error("zero tempo in store msg"); + tempo = 60; + } + tempo_factor = (60.0/tempo); + p[pnum].dsamps = p[pnum].beats * tempo_factor * sr; + pdex = 2; + + // post("%f beats %f samps in this pattern",p[pnum].beats,p[pnum].dsamps ); + while(pdex < argc){ + slot = atom_getfloatarg(pdex++,argc,argv); + p[pnum].drumlines[slot].active = 1; + tmpbeats = p[pnum].beats; + + trigger_point = 0; + attack_count = 0; + while(tmpbeats > 0){ + local_attacks = 0; + beatseg = atom_getfloatarg(pdex++,argc,argv); + subdiv = atom_getfloatarg(pdex++,argc,argv); + beat_samps = (beatseg/subdiv) * tempo_factor * sr; + + /* read attack cycle and store any non-zero attacks */ + for(i = 0; i < subdiv; i++){ + val = atom_getfloatarg(pdex++,argc,argv); + if(val){ + p[pnum].drumlines[slot].attacks[attack_count + local_attacks].amplitude = val; + /* force to integer sample point (couldn't get round() to work) */ + p[pnum].drumlines[slot].attacks[attack_count + local_attacks].trigger_point = (int)trigger_point; + ++local_attacks; + } + trigger_point += beat_samps; + } + /* we now know number of attacks and read that many transpose factors */ + + for(i = 0; i < local_attacks; i++){ + p[pnum].drumlines[slot].attacks[i + attack_count].increment = atom_getfloatarg(pdex++,argc,argv); + } + tmpbeats -= beatseg; + attack_count += local_attacks; + } + p[pnum].drumlines[slot].attack_count = attack_count; + // post("%d attacks in slot %d for pattern %d",attack_count, slot, pnum); + } + // new - set internal pointer to start of array + p[pnum].drumlines[slot].adex = 0; + // set current pattern to this (to avoid crash if pnum 0 is uninitialized) + x->this_pattern = x->next_pattern = pnum; + x->virgin = 0; // now at least one pattern is stored + x->stored_patterns[pnum] = 1; // means there's something there now + x->tempo_factor = tempo_factor;//restore this value + // post("pattern stored at %d with %f beats",pnum,p[pnum].beats); +} + + +void dmach_init_pattern(t_dmach *x, int pnum) +{ + int i; + int drum_count = x->drum_count; + t_pattern *p = x->patterns; + if(pnum < 0 || pnum >= MAX_PATTERNS){ + error("invalid pattern number: %d",pnum); + return; + } + + + + if( x->stored_patterns[pnum] ){ + // post("replacing pattern stored at %d",pnum); + } + + if(p[pnum].drumlines == NULL){ + // post("initializing drumline memory at location %d",pnum); + p[pnum].drumlines = (t_drumline *)malloc(drum_count * sizeof(t_drumline)); + } + + + for(i = 0; i < drum_count; i++){ + p[pnum].drumlines[i].attacks = (t_attack *)calloc(MAX_ATTACKS, sizeof(t_attack)); + p[pnum].drumlines[i].adex = 0; + p[pnum].drumlines[i].active = 0; + p[pnum].drumlines[i].attack_count = 0; + } + + +} + +void dmach_dsp_free( t_dmach *x ) +{ + /* need some freeing action here! */ + free(x->patterns); + free(x->stored_patterns); + free(x->current_increment); + free(x->gtranspose); + free(x->gains); + free(x->sequence); + free(x->listdata); + free(x->connected); + free(x->tmpatks); + free(x->muted); +} + +void dmach_mute(t_dmach *x, t_floatarg toggle) +{ + x->mute = (short)toggle; +} + +void dmach_instant_recall(t_dmach *x, t_floatarg toggle) +{ + x->instant_recall = (short)toggle; +} + +void dmach_clickincr(t_dmach *x, t_floatarg toggle) +{ + x->clickincr = (short)toggle; +} + + + +void *dmach_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_dmach *x; + x = (t_dmach *)pd_new(dmach_class); + + if(argc >= 1) + x->tempo = atom_getfloatarg(0,argc,argv); + else + x->tempo = 120; + if(argc >= 2) + x->drum_count = atom_getfloatarg(1,argc,argv); + else + x->drum_count = 8; + + x->outlet_count = x->drum_count * 2 + 1; // one extra for pattern start click + + for(i = 0; i < x->outlet_count; i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + x->listraw_outlet = outlet_new(&x->x_obj, gensym("list")); + x->patterns = (t_pattern *) malloc(MAX_PATTERNS * sizeof(t_pattern)); + x->stored_patterns = (short *) malloc(MAX_PATTERNS * sizeof(short)); + x->current_increment = (float *) malloc(x->drum_count * sizeof(float)); // for sample + hold of increment + x->gtranspose = (float *) malloc(x->drum_count * sizeof(float)); + x->gains = (float *) malloc(x->drum_count * sizeof(float)); + x->sequence = (int *) malloc(1024 * sizeof(int)); + x->listdata = (t_atom *) malloc(1024 * sizeof(t_atom)); + x->connected = (short *) malloc(1024 * sizeof(short)); + x->tmpatks = (t_attack *)calloc(MAX_ATTACKS, sizeof(t_attack)); + x->muted = (short *)calloc(x->drum_count, sizeof(short)); // by default mute is off on each slot + + x->seqptr = 0; + x->sequence_length = 0; + x->playsequence = 0; + x->loopsequence = 0; + x->zeroalias = -1.0; + x->clickincr = 0; + x->instant_recall = 0; + + + if(x->tempo <= 0 || x->tempo > 6666) + x->tempo = 60.0; + + // post("initial tempo is %f",x->tempo); + for(i = 0; i < MAX_PATTERNS; i++){ + x->patterns[i].drumlines = NULL; + x->stored_patterns[i] = 0; + } + x->this_pattern = x->next_pattern = 0; + x->mute = 0; + + x->clocker = 0; + x->sr = sys_getsr(); + x->tempo_factor = 60.0 / x->tempo ; + + for(i = 0; i < x->drum_count; i++){ + x->gains[i] = 1.0; + x->gtranspose[i] = 1.0; + x->current_increment[i] = 1.0; + } + // safety - init memory for all drum patterns + for(i = 0; i < MAX_PATTERNS; i++){ + dmach_init_pattern(x,i); + } + x->virgin = 1; + return (x); +} + + + +t_int *dmach_perform(t_int *w) +{ + int i,j; + t_float *trig_outlet, *incr_outlet; + + t_dmach *x = (t_dmach *) w[1]; + int outlet_count = x->outlet_count; + // t_float *in_sync = (t_float *) w[2]; // input for sync trigger (not implemented yet) + t_float *sync = (t_float *) w[outlet_count + 2]; + int n = (int) w[outlet_count + 3]; + + int this_pattern = x->this_pattern; + int next_pattern = x->next_pattern; + t_pattern *p = x->patterns; + float *current_increment = x->current_increment; + float clocker = x->clocker; + float dsamps = p[this_pattern].dsamps; + int drum_count = x->drum_count; + int adex; + /* sequence stuff */ + int *sequence = x->sequence; + short playsequence = x->playsequence; + short loopsequence = x->loopsequence; + short clickincr = x->clickincr; + int seqptr = x->seqptr; + int sequence_length = x->sequence_length; + short *connected = x->connected; + short *muted = x->muted; + float *gtranspose = x->gtranspose; + float *gains = x->gains; + + /* clean pnum click outlet */ + memset((void *)sync, 0, n * sizeof(float)); + + if( x->mute || x->virgin ){ + for(i = 0; i < drum_count; i++){ + if(connected[i * 2 + 1]){ + // post("cleaning outlet pair %d", i); + trig_outlet = (t_float *) w[i * 2 + 3]; + memset((void *)trig_outlet, 0, n * sizeof(float)); + } + } + return w + (outlet_count + 4); + } + + /* pre-clean all connected trigger vectors */ + for(i = 0; i < drum_count; i++){ + if(connected[i * 2 + 1]){ + trig_outlet = (t_float *) w[i * 2 + 3]; + memset((void *)trig_outlet, 0, n * sizeof(float)); + } + } + + for(j = 0; j < n; j++){ + if(clocker >= dsamps){ // ready for next pattern now + clocker -= dsamps; + /* this is the pattern sequencer */ + if(playsequence){ + if (seqptr >= sequence_length){ + if(loopsequence){ + seqptr = 0; + } else { + /* this is fine, the playthrough has concluded and we now mute external */ + x->mute = 1; + goto escape; + } + } + this_pattern = sequence[seqptr++]; + + } + /* we do this if we're not pattern sequencing: */ + else if(next_pattern != this_pattern){ + this_pattern = next_pattern; + } + + for(i = 0; i < drum_count; i++){ /* reset pointers */ + p[this_pattern].drumlines[i].adex = 0; + } + /* send current bar number if in sequence. Note kludge for if + bar is 0. We cannot send a 0 click so we alias it to something else. + */ + if(playsequence){ + if(this_pattern){ + sync[j] = this_pattern; + } else { + sync[j] = x->zeroalias; + } + } else{ + sync[j] = 1; /* send a sync click */ + } + } + else { + sync[j] = 0; + } + for(i = 0; i < drum_count; i++){ + // float locamp; + if(p[this_pattern].drumlines[i].active && ! muted[i]){ + trig_outlet = (t_float *) w[i * 2 + 3]; + incr_outlet = (t_float *) w[i * 2 + 4]; + + adex = p[this_pattern].drumlines[i].adex; // overflow danger ??? + + if((int)clocker == (int)p[this_pattern].drumlines[i].attacks[adex].trigger_point){ + current_increment[i] = + p[this_pattern].drumlines[i].attacks[adex].increment * gtranspose[i]; + /* put sync click into sample j of the output vector */ + + trig_outlet[j] = + p[this_pattern].drumlines[i].attacks[adex].amplitude * gains[i]; + ++adex; + p[this_pattern].drumlines[i].adex = adex; + incr_outlet[j] = current_increment[i]; + /* + post("t: sample %d, slot %d, amp: %f, incr: %f", + (int)clocker, i, locamp, current_increment[i]); */ + } + else { + trig_outlet[j] = 0; // not sure we need these assignments ?? + if(clickincr){ + incr_outlet[j] = 0; + } else { + incr_outlet[j] = current_increment[i]; // samp + hold the increment to outlet + } + } + + } + } + ++clocker; + } + +escape: + + x->clocker = clocker; + x->this_pattern = this_pattern; + x->seqptr = seqptr; + + return w + (outlet_count + 4); +} + +void dmach_dsp(t_dmach *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count; + + + if(x->virgin){ + post("%s: no patterns are stored",OBJECT_NAME); + // return; + } + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + /* still need to adjust every stored pattern dsamps variable */ + } + + pointer_count = x->outlet_count + 3; // all outlets, 1 inlet, object and s_n + + // post("pointer count %d", pointer_count); + + + // copy vector to be safe + + for(i = 0; i < pointer_count - 2; i++){ + x->connected[i] = 1; + } + + + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + + dsp_addv(dmach_perform, pointer_count, (t_int *) sigvec); + free(sigvec); +} + diff --git a/externals/lyonpotpourri/dynss~-help.pd b/externals/lyonpotpourri/dynss~-help.pd new file mode 100755 index 000000000..92499b50d --- /dev/null +++ b/externals/lyonpotpourri/dynss~-help.pd @@ -0,0 +1,54 @@ +#N canvas 804 342 414 292 10; +#X obj 33 212 *~ 0.1; +#X obj 33 244 dac~; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X msg 93 107 devx \$1; +#X obj 270 140 hsl 70 12 0 1 0 0 dynss-devx dynss-devx-in devx -2 -8 +0 10 -261682 -1 -1 0 1; +#X floatatom 93 89 5 0 0 0 - dynss-devx -, f 5; +#X obj 270 165 hsl 70 12 0 1 0 0 dynss-devy dynss-devy-in devy -2 -8 +0 10 -261682 -1 -1 0 1; +#X floatatom 154 88 5 0 0 0 - dynss-devy -, f 5; +#X msg 154 106 devy \$1; +#X obj 270 191 hsl 70 12 0 1 0 0 dynss-gain dynss-gain-in gain -2 -8 +0 10 -261682 -1 -1 0 1; +#X floatatom 66 194 5 0 0 1 gain dynss-gain -, f 5; +#X msg 34 106 freq \$1; +#X obj 270 115 hsl 70 12 50 600 0 0 dynss-freq dynss-freq-in frequency +-2 -8 0 10 -261682 -1 -1 0 1; +#X floatatom 34 89 5 0 0 0 - dynss-freq -, f 5; +#X obj 33 172 dynss~; +#X obj 120 144 r dynss.messages; +#N canvas 23 22 686 335 messages 0; +#X msg 177 130 new_wave; +#X msg 179 153 new_amps; +#X msg 176 105 printwave; +#X obj 107 225 s dynss.messages; +#X msg 172 77 pointcount \$1; +#X msg 172 40 4; +#X msg 220 38 15; +#X text 279 78 set the number of breakpoints in the waveform; +#X text 250 111 print the breakpoints to the Pd window; +#X text 245 137 generate a new waveform; +#X text 245 154 generate new amplitudes \, but keep the y-values; +#X connect 0 0 3 0; +#X connect 2 0 3 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X restore 71 243 pd messages; +#X text 153 244 <- more info here; +#X text 21 42 dynss~ - dynamic stochastic synthesis as described by +Iannis Xenakis in "Formalized Music"; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 3 0 14 0; +#X connect 5 0 3 0; +#X connect 7 0 8 0; +#X connect 8 0 14 0; +#X connect 10 0 0 1; +#X connect 11 0 14 0; +#X connect 13 0 11 0; +#X connect 14 0 0 0; +#X connect 15 0 14 0; diff --git a/externals/lyonpotpourri/dynss~.c b/externals/lyonpotpourri/dynss~.c new file mode 100755 index 000000000..70e9c9a39 --- /dev/null +++ b/externals/lyonpotpourri/dynss~.c @@ -0,0 +1,324 @@ +#include "MSPd.h" + +static t_class *dynss_class; + +#define MAXPOINTS (64) +#define OBJECT_NAME "dynss~" +#define COMPILE_DATE "9.02.07" +#define OBJECT_VERSION "2.01" + +//pd version + + +typedef struct _dynss +{ + + t_object x_obj; + t_float x_f; + + long point_count; // how many points in waveform (including beginning and end point) + t_double freq; // frequency + long counter; // count samples + long period_samples; // how many samples in a period + float srate; // sampling rate + long current_point; // which point are we on + t_double *values; + long *point_breaks; + t_double *norm_breaks; + t_double *xdevs; + t_double *ydevs; + t_double devscale_x; + t_double devscale_y; +} t_dynss; + +void dynss_tilde_setup(void); +void *dynss_new(void); +t_int *dynss_perform(t_int *w); +void dynss_dsp(t_dynss *x, t_signal **sp); +void version(void); +float boundrand(float min, float max); +void dynss_init(t_dynss *x,short initialized); +void dynss_devx(t_dynss *x, t_floatarg f); +void dynss_devy(t_dynss *x, t_floatarg f); +void dynss_freq(t_dynss *x, t_floatarg f); +void dynss_printwave(t_dynss *x); +void dynss_new_wave(t_dynss *x); +void dynss_pointcount(t_dynss *x, t_floatarg f); +void dynss_new_amps(t_dynss *x); + +void dynss_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("dynss~"), (t_newmethod)dynss_new, 0, sizeof(t_dynss), 0,0); + CLASS_MAINSIGNALIN(c,t_dynss,x_f); + class_addmethod(c,(t_method)dynss_dsp, gensym("dsp"), A_CANT, 0); + + class_addmethod(c,(t_method)version,gensym("version"),0); + class_addmethod(c,(t_method)dynss_devx,gensym("devx"),A_FLOAT,0); + class_addmethod(c,(t_method)dynss_devy,gensym("devy"),A_FLOAT,0); + class_addmethod(c,(t_method)dynss_freq,gensym("freq"),A_FLOAT,0); + class_addmethod(c,(t_method)dynss_printwave,gensym("printwave"),0); + class_addmethod(c,(t_method)dynss_new_wave,gensym("new_wave"),0); + class_addmethod(c,(t_method)dynss_new_amps,gensym("new_amps"),0); + class_addmethod(c,(t_method)dynss_pointcount,gensym("pointcount"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); + dynss_class = c; +} + + +void dynss_pointcount(t_dynss *x, t_floatarg f) +{ + if(f >= 2 && f <= MAXPOINTS ){ + x->point_count = (long) f; + dynss_init(x,0); + } +} + +void dynss_freq(t_dynss *x, t_floatarg f) +{ + x->freq = fabs(f); +} + +void dynss_devx(t_dynss *x, t_floatarg f) +{ + x->devscale_x = f; +} + +void dynss_devy(t_dynss *x, t_floatarg f) +{ + x->devscale_y = f; +} + +void version(void) +{ + post("%s version %s, compiled %s",OBJECT_NAME, OBJECT_VERSION, COMPILE_DATE); +} + +void dynss_printwave(t_dynss *x) +{ + int i; + for(i = 0; i < x->point_count; i++){ + post("point %d break %d norm break %f value %f",i, x->point_breaks[i], x->norm_breaks[i], x->values[i]); + } +} + +void dynss_new_wave(t_dynss *x) +{ + dynss_init(x,0); +} + +void dynss_new_amps(t_dynss *x) +{ + int i; + for(i = 1; i < x->point_count - 1; i++){ + x->values[i] = boundrand(-0.95, 0.95); + } +} + + +void *dynss_new(void) +{ + t_dynss *x = (t_dynss *)pd_new(dynss_class); + outlet_new(&x->x_obj, gensym("signal")); + x->srate = sys_getsr(); + x->point_count = 6; // including fixed start and endpoint, so just 4 dynamic points + + x->values = (t_double *) calloc(MAXPOINTS + 2, sizeof(t_double)); + x->point_breaks = (long *) calloc(MAXPOINTS + 2, sizeof(long)); + x->norm_breaks = (t_double *) calloc(MAXPOINTS + 2, sizeof(t_double)); + x->xdevs = (t_double *) calloc(MAXPOINTS + 2, sizeof(t_double)); + x->ydevs = (t_double *) calloc(MAXPOINTS + 2, sizeof(t_double)); + + if(! x->srate ){ + x->srate = 44100; + post("sr autoset to 44100"); + } + x->freq = 100.0; + + srand(time(0)); + + dynss_init(x,0); + + return (x); +} + + +float boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); +} + +void dynss_init(t_dynss *x,short initialized) +{ + int i,j; + float findex; + long point_count = x->point_count; + t_double *values = x->values; + t_double *norm_breaks = x->norm_breaks; + long *point_breaks = x->point_breaks; + t_double *ydevs = x->ydevs; + t_double *xdevs =x->xdevs; + + + if(!initialized){ + x->period_samples = (long)(x->srate / x->freq); + x->counter = 0; + x->current_point = 0; + x->devscale_x = 0.0; // no evolution by default + x->devscale_y = 0.0; + // post("there are %d samples per period, srate %f freq %f", x->period_samples, x->srate, x->freq); + norm_breaks[0] = 0.0; + norm_breaks[point_count - 1] = 1.0; + values[0] = values[point_count - 1] = 0.0; + for(i = 1; i < point_count - 1; i++){ + values[i] = boundrand(-1.0, 1.0); + norm_breaks[i] = boundrand(0.05,0.95); + } + // now sort into order (insertion sort) + + for(i = 1; i < point_count; i++){ + findex = norm_breaks[i]; + j = i; + while( j > 0 && norm_breaks[j-1] > findex){ + norm_breaks[j] = norm_breaks[j-1]; + j = j - 1; + } + norm_breaks[j] = findex; + + } + // now generate sample break points; + for(i = 0; i < point_count; i++){ + point_breaks[i] = (long) ( (float)x->period_samples * norm_breaks[i] ); + // post("%i %f %f",point_breaks[i], norm_breaks[i], values[i]); + } + // set y deviation maxes + for(i = 0; i < point_count; i++){ + ydevs[i] = boundrand(0.0,0.99); + xdevs[i] = boundrand(0.0,0.99); + // post("rands: %f %f",ydevs[i],xdevs[i]); + } + } else { + + } +} + + +t_int *dynss_perform(t_int *w) +{ + //int i, j, k; + // float outval; + int i,j; + float findex1,findex2; + t_dynss *x = (t_dynss *) (w[1]); +// t_float *inlet = (t_float *) (w[2]); + t_float *outlet = (t_float *) (w[3]); + int n = (int) w[4]; + t_double *values = x->values; + t_double *norm_breaks = x->norm_breaks; + long *point_breaks = x->point_breaks; + t_double *ydevs = x->ydevs; + t_double *xdevs = x->xdevs; + long counter = x->counter; + long period_samples = x->period_samples; + long current_point = x->current_point; + long point_count = x->point_count; + float sample; + float frak; + float dev, newval; + long segsamps; + + while(n--){ + if( counter == point_breaks[current_point + 1]){ + sample = values[current_point + 1]; + ++current_point; + if(current_point > point_count - 1){ + current_point = 0; + counter = 0; + } + } + + else { + segsamps = point_breaks[current_point + 1] - point_breaks[current_point]; + if( segsamps <= 1){ + frak = 0.0; + } + else { + frak = (float)(counter - point_breaks[current_point]) / (float)segsamps; + //post("frak %f counter %d point break %d diff %d",frak, counter, point_breaks[current_point],counter - point_breaks[current_point] ); + if( frak < 0.0 || frak > 1.0 ){ + post("bad fraction: %f",frak); + post("current point: %d", current_point); + post("segsamps %d counter %d current break %d next break %d", segsamps, counter, point_breaks[current_point], point_breaks[current_point + 1]); + } + } + if(current_point < 0 || current_point > point_count - 1){ + post("ERROR: dss had bad current point!"); + sample = 0; + } else { + sample = values[current_point] + (values[current_point+1] - values[current_point]) * frak; + + } + } + ++counter; + if(counter >= period_samples){ + counter = 0; + current_point = 0; + if( x->freq > 0.0 ){ + period_samples = x->srate / x->freq; + } + // nudge waveform + for(i = 1; i < point_count - 1; i++){ + dev = boundrand(-1.0,1.0) * ydevs[i] * x->devscale_y; + newval = values[i] + dev; + // clip + newval = newval > 0.95 ? 0.95 : newval; + newval = newval < -0.95 ? -0.95 : newval; + values[i] = newval; + } + for(i = 1; i < point_count - 1; i++){ + dev = boundrand(-1.0,1.0) * xdevs[i] * x->devscale_x; + newval = norm_breaks[i] + dev; + // clip + newval = newval < 0.05 ? 0.05 : newval; + newval = newval > 0.95 ? 0.95: newval; + norm_breaks[i] = newval; + /* if(norm_breaks[i] < norm_breaks[i-1]){ + norm_breaks[i] = norm_breaks[i-1] + 0.03; // disallow point jumps for now + } */ + } + // now sort them + + for(i = 1; i < point_count; i++){ + findex1 = norm_breaks[i]; + findex2 = values[i]; + j = i; + while( j > 0 && norm_breaks[j-1] > findex1){ + norm_breaks[j] = norm_breaks[j-1]; + values[j] = values[j-1]; + j = j - 1; + } + norm_breaks[j] = findex1; + values[j] = findex2; + } + + // now generate sample breaks + for(i = 0; i < point_count; i++){ + point_breaks[i] = (long) ( (float)period_samples * norm_breaks[i] ); + } + } + *outlet++ = sample; + } + x->counter = counter; + x->current_point = current_point; + x->period_samples = period_samples; + return (w + 5); +} + + +void dynss_dsp(t_dynss *x, t_signal **sp) +{ + if(x->srate != sp[0]->s_sr) { + x->srate = sp[0]->s_sr; + } + dsp_add(dynss_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec,sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/ellipse.c b/externals/lyonpotpourri/ellipse.c new file mode 100755 index 000000000..358333210 --- /dev/null +++ b/externals/lyonpotpourri/ellipse.c @@ -0,0 +1,250 @@ +#include "bashfest.h" + +float ellipse(float x, LSTRUCT *eel, int nsects, float xnorm) +{ + register int m; + float op; + + for(m=0;m<nsects;m++) { + op = x + eel[m].c0 * eel[m].ps0 + eel[m].c2 * eel[m].ps1 + - eel[m].c1 * eel[m].ps2 - eel[m].c3 * eel[m].ps3; + eel[m].ps1 = eel[m].ps0; + eel[m].ps0 = x; + eel[m].ps3 = eel[m].ps2; + eel[m].ps2 = op; + x = op; + } + return(x*xnorm); +} + +void ellipset(float *list, LSTRUCT *eel, int *nsects, float *xnorm) +{ +/* the first argument in the list is the number of sections */ + int m,i; + *nsects = (int)list[0]; + if(*nsects > MAXSECTS) { + error("sorry, only configured for %d sections",MAXSECTS); + return; + } + i=1; + for(m=0;m<*nsects;m++) { + eel[m].c0 = list[i++]; + eel[m].c1 = list[i++]; + eel[m].c2 = list[i++]; + eel[m].c3 = list[i++]; + eel[m].ps0 = eel[m].ps1 = eel[m].ps2 = eel[m].ps3 = 0; + } + *xnorm = list[i]; +} +/*set biquad coefficients one time*/ +void init_ellipse_data(float **a) +{ + /* 0: hipass at 200 */ + a[0][0] = 4; + a[0][1] = 1.5156562; + a[0][2] = -1.9958239; + a[0][3] = 1; + a[0][4] = 0.9965234; + a[0][5] = -1.9996996; + a[0][6] = 0.97229244; + a[0][7] = 1; + a[0][8] = 0.89313463; + a[0][9] = 1.8828678; + a[0][10] = -1.9561138; + a[0][11] = 1; + a[0][12] = 0.95845959; + a[0][13] = -1.9999342; + a[0][14] = -0.065893592; + a[0][15] = 1; + a[0][16] = 0.39565826; + a[0][17] = 0.26225143; + /* 1: hipass at 500 */ + a[1][0] = 3; + a[1][1] = -1.9950633; + a[1][2] = -1.9910746; + a[1][3] = 1; + a[1][4] = 0.99729187; + a[1][5] = -1.9964182; + a[1][6] = -1.9742933; + a[1][7] = 1; + a[1][8] = 0.98250468; + a[1][9] = -1.999304; + a[1][10] = -1.8149534; + a[1][11] = 1; + a[1][12] = 0.84353385; + a[1][13] = 0.90419364; + /* 2: bandpass 280 - 700 */ + a[2][0] = 4; + a[2][1] = -1.9989934; + a[2][2] = -1.9946771; + a[2][3] = 1; + a[2][4] = 0.99626146; + a[2][5] = -1.9843098; + a[2][6] = -1.9807532; + a[2][7] = 1; + a[2][8] = 0.99066977; + a[2][9] = -1.9996779; + a[2][10] = -1.9795816; + a[2][11] = 1; + a[2][12] = 0.9820447; + a[2][13] = -1.9513627; + a[2][14] = -1.965153; + a[2][15] = 1; + a[2][16] = 0.97142923; + a[2][17] = 0.013949928; + /* 3: lopass at 500 */ + a[3][0] = 3; + a[3][1] = -1.9922858; + a[3][2] = -1.9903447; + a[3][3] = 1; + a[3][4] = 0.99525722; + a[3][5] = -1.9849712; + a[3][6] = -1.9765264; + a[3][7] = 1; + a[3][8] = 0.97923558; + a[3][9] = 1; + a[3][10] = -0.98180316; + a[3][11] = 0; + a[3][12] = 0; + a[3][13] = 0.0014021298; + /* 4: lopass at 2K */ + a[4][0] = 3; + a[4][1] = -1.9170388; + a[4][2] = -1.9264647; + a[4][3] = 1; + a[4][4] = 0.99064223; + a[4][5] = -1.8850187; + a[4][6] = -1.9092573; + a[4][7] = 1; + a[4][8] = 0.95627234; + a[4][9] = -1.4613313; + a[4][10] = -1.8821271; + a[4][11] = 0.99999996; + a[4][12] = 0.89422169; + a[4][13] = 0.0071020706; + /* 5: + f1,f2,f3= 400.0 900.0 2500. ripple= 1.000 db= 40.00 */ + a[5][0] = 4; + a[5][1] = -1.9594111; + a[5][2] = -1.9900446; + a[5][3] = 1; + a[5][4] = 0.9932218; + a[5][5] = -1.9986938; + a[5][6] = -1.967975; + a[5][7] = 1; + a[5][8] = 0.98456911; + a[5][9] = -1.8436241; + a[5][10] = -1.9696535; + a[5][11] = 1; + a[5][12] = 0.9745592; + a[5][13] = -1.9996708; + a[5][14] = -1.9523041; + a[5][15] = 1; + a[5][16] = 0.96284515; + a[5][17] = 0.0027629927; + /* 6: hipass at 500 */ + a[6][0] = 3; + a[6][1] = -1.9950633; + a[6][2] = -1.9910746; + a[6][3] = 1; + a[6][4] = 0.99729187; + a[6][5] = -1.9964182; + a[6][6] = -1.9742933; + a[6][7] = 1; + a[6][8] = 0.98250468; + a[6][9] = -1.999304; + a[6][10] = -1.8149534; + a[6][11] = 1; + a[6][12] = 0.84353385; + a[6][13] = 0.90419364; + /* 7: bandpass 1000-4000-6000 */ + a[7][0] = 4; + a[7][1] = -1.9924766; + a[7][2] = -1.9573893; + a[7][3] = 1; + a[7][4] = 0.97714717; + a[7][5] = -1.2471186; + a[7][6] = -1.6082873; + a[7][7] = 1; + a[7][8] = 0.91482231; + a[7][9] = -1.9983103; + a[7][10] = -1.8512918; + a[7][11] = 1; + a[7][12] = 0.88910013; + a[7][13] = 0.033335148; + a[7][14] = -1.6413378; + a[7][15] = 0.99999998; + a[7][16] = 0.78964041; + a[7][17] = 0.0087452226; + /* 8: hipass 4000-10000 */ + a[8][0] = 1; + a[8][1] = -1.9896868; + a[8][2] = -1.3953066; + a[8][3] = 1; + a[8][4] = 0.58943112; + a[8][5] = 0.74811328; + /* 9: bandpass 500-2500-3500 */ + a[9][0] = 6; + a[9][1] = -1.9975736; + a[9][2] = -1.9902167; + a[9][3] = 1; + a[9][4] = 0.99529287; + a[9][5] = -1.7460823; + a[9][6] = -1.853476; + a[9][7] = 1; + a[9][8] = 0.97721553; + a[9][9] = -1.9984481; + a[9][10] = -1.9737545; + a[9][11] = 1; + a[9][12] = 0.98056598; + a[9][13] = -1.6166383; + a[9][14] = -1.8408836; + a[9][15] = 0.99999999; + a[9][16] = 0.93097271; + a[9][17] = -1.9997426; + a[9][18] = -1.9320458; + a[9][19] = 1; + a[9][20] = 0.94629262; + a[9][21] = -0.44018748; + a[9][22] = -1.8664352; + a[9][23] = 0.99999993; + a[9][24] = 0.90871633; + a[9][25] = 0.00044746789; + /* 10: bp-300-400-2500-70dB */ + a[10][0] = 8; + a[10][1] = -1.7823256; + a[10][2] = -1.9938863; + a[10][3] = 1; + a[10][4] = 0.99712611; + a[10][5] = -1.9981713; + a[10][6] = -1.8579881; + a[10][7] = 1; + a[10][8] = 0.9825214; + a[10][9] = -1.7151492; + a[10][10] = -1.9844167; + a[10][11] = 1; + a[10][12] = 0.9884184; + a[10][13] = -1.9986272; + a[10][14] = -1.8447412; + a[10][15] = 1; + a[10][16] = 0.94374559; + a[10][17] = -1.3382862; + a[10][18] = -1.9602273; + a[10][19] = 1; + a[10][20] = 0.96717992; + a[10][21] = -1.9994689; + a[10][22] = -1.8529558; + a[10][23] = 1; + a[10][24] = 0.90889168; + a[10][25] = 1; + a[10][26] = -1.903171; + a[10][27] = 0; + a[10][28] = 0.92280038; + a[10][29] = -1; + a[10][30] = 0; + a[10][31] = 0; + a[10][32] = 0; + a[10][33] = 0.00022546378; +} + + diff --git a/externals/lyonpotpourri/epluribus~-help.pd b/externals/lyonpotpourri/epluribus~-help.pd new file mode 100755 index 000000000..0558a68b6 --- /dev/null +++ b/externals/lyonpotpourri/epluribus~-help.pd @@ -0,0 +1,32 @@ +#N canvas 732 505 416 313 10; +#X obj 129 165 epluribus~ 3; +#X obj 210 191 click2float~; +#X obj 129 224 *~ 0.1; +#X obj 129 256 dac~; +#X obj 205 256 hsl 70 12 0 1 0 0 epluribus-gain epluribus-gain-in gain +-2 -8 0 10 -261443 -1 -1 0 1; +#X floatatom 167 206 5 0 0 0 - epluribus-gain -, f 5; +#X obj 23 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 25 108 phasor~ 620; +#X obj 25 131 killdc~; +#X obj 120 131 killdc~; +#X obj 120 108 phasor~ 620.77; +#X obj 233 130 killdc~; +#X floatatom 211 224 5 0 0 0 - - -, f 5; +#X text 254 221 selected channel; +#X obj 233 107 phasor~ 600.9; +#X text 25 47 epluribus~ selects the highest absolute-valued sample +from all its inputs \, on a pre-sample basis; +#X connect 0 0 2 0; +#X connect 0 1 1 0; +#X connect 1 0 12 0; +#X connect 2 0 3 0; +#X connect 2 0 3 1; +#X connect 5 0 2 1; +#X connect 7 0 8 0; +#X connect 8 0 0 0; +#X connect 9 0 0 1; +#X connect 10 0 9 0; +#X connect 11 0 0 2; +#X connect 14 0 11 0; diff --git a/externals/lyonpotpourri/epluribus~.c b/externals/lyonpotpourri/epluribus~.c new file mode 100755 index 000000000..6c4200ab6 --- /dev/null +++ b/externals/lyonpotpourri/epluribus~.c @@ -0,0 +1,149 @@ +#include "MSPd.h" + +static t_class *epluribus_class; + +#define MAXBEATS (256) +#define OBJECT_NAME "epluribus~" +#define COMPILE_DATE "5.3.08" +#define OBJECT_VERSION "2.0" + +typedef struct _epluribus +{ + t_object x_obj; + float x_f; + int incount; // how many inlets (must be at least 2) + short inverse; // flag to look for minimum instead +} t_epluribus; + +void *epluribus_new(t_symbol *msg, int argc, t_atom *argv); +t_int *epluribus_perform(t_int *w); +void epluribus_dsp(t_epluribus *x, t_signal **sp); +void epluribus_inverse(t_epluribus *x, t_floatarg tog); + +void epluribus_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("epluribus~"), (t_newmethod)epluribus_new, + 0,sizeof(t_epluribus), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(c, t_epluribus, x_f); + class_addmethod(c, (t_method)epluribus_dsp, gensym("dsp"), 0); + class_addmethod(c, (t_method)epluribus_inverse, gensym("inverse"),A_FLOAT, 0); + epluribus_class = c; + potpourri_announce(OBJECT_NAME); +} + +void epluribus_inverse(t_epluribus *x, t_floatarg tog) +{ + x->inverse = (short) tog; +} + + +void *epluribus_new(t_symbol *msg, int argc, t_atom *argv) +{ + t_epluribus *x; + int i; + x = (t_epluribus *)pd_new(epluribus_class); + x->incount = (int) atom_getfloatarg(0,argc,argv); + if(x->incount < 2 || x->incount > 256 ){ + int defcount = x->incount < 2 ? 2 : 256; + post("%s: warning: there must be between 2 and 256 input vectors", + OBJECT_NAME); + post("defaulting to %d", defcount); + x->incount = defcount; + } + + for(i = 0; i < x->incount - 1; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->inverse = 0; // by default don't do inverse behaviour + return (x); +} + + +t_int *epluribus_perform(t_int *w) +{ + int i,j,k; + t_epluribus *x = (t_epluribus *) (w[1]); + t_float *inlet; + t_float *outlet; + t_float *selection; + t_int n; + t_float maxamp = 0.0; + t_float maxout = 0.0; + int maxloc; + int incount = x->incount; + int next_pointer = incount + 5; + + outlet = (t_float *) w[incount + 2]; + selection = (t_float *) w[incount + 3]; + n = (int) w[incount + 4]; + + if( x->inverse ){ + for(k = 0; k < n; k ++ ){ + maxamp = 99999999.0; + maxloc = 0; + for(i = 0, j=2; i < incount ; i++, j++){ + inlet = (t_float *) (w[j]); + if( maxamp > fabs( inlet[k] ) ){ + maxamp = fabs( inlet[k] ); + maxout = inlet[k]; // don't actually change signal + maxloc = i + 1; // record location of max amp + } + } + outlet[k] = maxout; + selection[k] = maxloc; + } + } + else { + for(k = 0; k < n; k ++ ){ + maxamp = 0.0; + maxloc = 0; + for(i = 0, j=2; i < incount ; i++, j++){ + inlet = (t_float *) (w[j]); + if( maxamp < fabs( inlet[k] ) ){ + maxamp = fabs( inlet[k] ); + maxout = inlet[k]; // don't actually change signal + maxloc = i + 1; // record location of max amp + } + } + outlet[k] = maxout; + selection[k] = maxloc; + } + } + + return w + next_pointer; +} + + +void epluribus_dsp(t_epluribus *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count; + + + if( x->incount < 2 || x->incount > 256 ){ + post("bad vector count"); + return; + } + pointer_count = x->incount + 4; // all metros, plus 2 outlets, plus the object pointer, plus N + + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + + dsp_addv(epluribus_perform, pointer_count, (t_int *) sigvec); + free(sigvec); + +} + diff --git a/externals/lyonpotpourri/examples/BD0010.aif b/externals/lyonpotpourri/examples/BD0010.aif new file mode 100755 index 0000000000000000000000000000000000000000..66781e2b2a65df7e9e94e0c6ae6d8bb12ae166f8 GIT binary patch literal 89282 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 G@c#isI&3%q literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/BT0AADA.aiff b/externals/lyonpotpourri/examples/BT0AADA.aiff new file mode 100755 index 0000000000000000000000000000000000000000..1c4f5f5b1d894fa19bc463e657475119818461b7 GIT binary patch literal 44030 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 literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/CP.aif b/externals/lyonpotpourri/examples/CP.aif new file mode 100755 index 0000000000000000000000000000000000000000..e90b1bedb51cfa2670ebbc4b595f408e54f00d8a GIT binary patch literal 21536 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 literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/KR55SNAR.aiff b/externals/lyonpotpourri/examples/KR55SNAR.aiff new file mode 100755 index 0000000000000000000000000000000000000000..81760c15f4dc93326307a52d6b7eb9e1389086de GIT binary patch literal 18622 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 S!w3%WiM^va5dIw@qW^zhn$x!c literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/bell.aiff b/externals/lyonpotpourri/examples/bell.aiff new file mode 100755 index 0000000000000000000000000000000000000000..4b2a49aecc442e6bc31ad0db85de26b56d3dc905 GIT binary patch literal 312012 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 Ycl<s0j}g2dXEiV_hyv%8D*n$00GbINy#N3J literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/hi_c_12b.aiff b/externals/lyonpotpourri/examples/hi_c_12b.aiff new file mode 100755 index 0000000000000000000000000000000000000000..e51d0602ee666a207cc3bd00d7ef63dfe978305f GIT binary patch literal 18248 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 literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/hi_o_06e.aiff b/externals/lyonpotpourri/examples/hi_o_06e.aiff new file mode 100755 index 0000000000000000000000000000000000000000..44775561afaad47ef117566fd6fd4900d7e713e8 GIT binary patch literal 39990 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 NQOrT~iF2`c^FP~CP<j9W literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/hi_o_15g.aiff b/externals/lyonpotpourri/examples/hi_o_15g.aiff new file mode 100755 index 0000000000000000000000000000000000000000..3d1fe42b9388478b39566c3ded58c76574952369 GIT binary patch literal 22396 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 BX|MnQ literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/kick_11d.aiff b/externals/lyonpotpourri/examples/kick_11d.aiff new file mode 100755 index 0000000000000000000000000000000000000000..c067b7ebd898e5c161a33fd3d1ec3b7f855eae9a GIT binary patch literal 33822 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 QiqQWH|E~xBm-N8@1KAi9i~s-t literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/mar2.aif b/externals/lyonpotpourri/examples/mar2.aif new file mode 100755 index 0000000000000000000000000000000000000000..2d9430552bfc5b15b709541c9eebc47ee6e5dd9c GIT binary patch literal 6152 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 literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/prettypad.aif b/externals/lyonpotpourri/examples/prettypad.aif new file mode 100755 index 0000000000000000000000000000000000000000..dc7582b648dd858de331e3823f022caab15fe628 GIT binary patch literal 547546 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þ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�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≠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 W+wXyV_5c3;?+N_x3H*O}0{;g;KlD!k literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/soda-bd.aif b/externals/lyonpotpourri/examples/soda-bd.aif new file mode 100755 index 0000000000000000000000000000000000000000..f9848dec8aff14e5cacf455457b61e706e445005 GIT binary patch literal 172368 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 literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/trickhit.aif b/externals/lyonpotpourri/examples/trickhit.aif new file mode 100755 index 0000000000000000000000000000000000000000..944beac2788f375e29edb8cc170c4362b94a6620 GIT binary patch literal 102662 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�%ZKLXA+rY-8wxO-N+jP2R>K7)0=5K3` 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 P-Fg3c{mFqpIRO6${C97B literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/examples/voice.wav b/externals/lyonpotpourri/examples/voice.wav new file mode 100755 index 0000000000000000000000000000000000000000..8b7f1acc7300e7fbbd142e4b6a3f2e92c1e5955c GIT binary patch literal 124204 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ȯ^EL5G751PuxD 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 DYa~$D literal 0 HcmV?d00001 diff --git a/externals/lyonpotpourri/expflam~-help.pd b/externals/lyonpotpourri/expflam~-help.pd new file mode 100755 index 000000000..cb8ceea4e --- /dev/null +++ b/externals/lyonpotpourri/expflam~-help.pd @@ -0,0 +1,136 @@ +#N canvas 609 102 594 535 10; +#N canvas 774 592 522 372 load-samples 0; +#X obj 41 107 soundfiler; +#X msg 41 39 bang; +#X obj 41 65 openpanel; +#X obj 154 29 loadbang; +#X msg 41 87 read -resize \$1 expflam-drum; +#X msg 154 54 read -resize examples/kick_11d.aiff expflam-drum; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 3 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X restore 307 282 pd load-samples; +#N canvas 0 22 450 300 (subpatch) 0; +#X array expflam-drum 16884 float 2; +#X coords 0 1 16884 -1 100 70 1; +#X restore 296 410 graph; +#X obj 58 370 player~ expflam-drum 1 8; +#X obj 83 321 loadbang; +#X obj 58 453 *~ 0.1; +#X obj 58 487 dac~; +#X obj 58 271 expflam~; +#X floatatom 95 428 5 0 0 0 - - -, f 5; +#X obj 27 166 r expflam-msg; +#N canvas 461 254 635 324 expflam-controls 0; +#X msg 27 143 bypass \$1; +#X obj 26 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 26 226 s expflam-msg; +#X msg 153 209 setflam \$1 \$2 \$3 \$4 \$5; +#X floatatom 152 129 5 0 0 0 - - -, f 5; +#X floatatom 192 130 5 0 0 0 - - -, f 5; +#X floatatom 233 130 5 0 0 0 - - -, f 5; +#X floatatom 273 131 5 0 0 0 - - -, f 5; +#X floatatom 314 131 5 0 0 0 - - -, f 5; +#N canvas 701 481 454 304 pak 0; +#X obj 63 60 inlet; +#X obj 65 150 pack f f f f f; +#X obj 112 59 inlet; +#X obj 110 85 t b f; +#X obj 167 54 inlet; +#X obj 165 80 t b f; +#X obj 216 53 inlet; +#X obj 214 79 t b f; +#X obj 267 53 inlet; +#X obj 265 79 t b f; +#X obj 68 184 outlet; +#X connect 0 0 1 0; +#X connect 1 0 10 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 3 1 1 1; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 5 1 1 2; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 7 1 1 3; +#X connect 8 0 9 0; +#X connect 9 0 1 0; +#X connect 9 1 1 4; +#X restore 153 170 pd pak; +#X obj 372 -16 hsl 115 15 20 90 0 0 empty empty start-delay -2 -8 0 +10 -162854 -1 -1 0 1; +#X obj 372 14 hsl 115 15 50 150 0 0 empty empty end-delay -2 -8 0 10 +-162854 -1 -1 0 1; +#X obj 373 46 hsl 115 15 3 32 0 0 empty empty attack-count -2 -8 0 +10 -162854 -1 -1 0 1; +#X obj 233 114 int; +#X obj 373 83 hsl 115 15 -6 6 0 0 empty empty slope -2 -8 0 10 -162854 +-1 -1 0 1; +#X obj 373 116 hsl 115 15 0.05 0.99 0 0 empty empty attenuation -2 +-8 0 10 -162854 -1 -1 0 1; +#X obj 75 56 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 76 81 flamall \$1; +#X text 96 58 flam everything; +#X text 43 114 flam nothing; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 9 0; +#X connect 5 0 9 1; +#X connect 6 0 9 2; +#X connect 7 0 9 3; +#X connect 8 0 9 4; +#X connect 9 0 3 0; +#X connect 10 0 4 0; +#X connect 11 0 5 0; +#X connect 12 0 13 0; +#X connect 13 0 6 0; +#X connect 14 0 7 0; +#X connect 15 0 8 0; +#X connect 16 0 17 0; +#X connect 17 0 2 0; +#X restore 304 327 pd expflam-controls; +#X msg 84 341 static_increment 0; +#X obj 223 318 sig~ 1; +#X obj 97 402 hsl 115 15 0 0.99 0 0 empty empty gain -2 -8 0 10 -162854 +-1 -1 0 1; +#X obj 172 187 mask~ 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0; +#X floatatom 224 299 5 0 0 0 - - -, f 5; +#X obj 227 281 hsl 64 12 0.5 2.5 0 0 empty empty increment -2 -8 0 +10 -244920 -1 -1 0 1; +#X obj 58 237 mask~ 1 0.5 0.5 0.5 1 0 0.5 0.5 1 0.5 1 0 0 0.5 1 0.125 +; +#X obj 172 116 samm~ 98 4; +#X text 25 47 expflam~ replaces a click trigger with a sequence of +triggers to create a flam., f 83; +#X text 180 147 flam gate signal - flams only occur where a 1 in gate +aligns with the attack pattern below; +#X text 224 220 attack pattern; +#X text 304 307 open this for more controls:; +#X msg 172 93 tempo \$1; +#X floatatom 172 74 5 20 200 0 - - -, f 5; +#X obj 23 11 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X connect 2 0 4 0; +#X connect 3 0 10 0; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 6 0 2 0; +#X connect 7 0 4 1; +#X connect 8 0 6 0; +#X connect 10 0 2 0; +#X connect 11 0 2 1; +#X connect 12 0 7 0; +#X connect 13 0 6 1; +#X connect 14 0 11 0; +#X connect 15 0 14 0; +#X connect 16 0 6 0; +#X connect 17 0 13 0; +#X connect 17 0 16 0; +#X connect 22 0 17 0; +#X connect 23 0 22 0; diff --git a/externals/lyonpotpourri/expflam~.c b/externals/lyonpotpourri/expflam~.c new file mode 100755 index 000000000..78bd5593f --- /dev/null +++ b/externals/lyonpotpourri/expflam~.c @@ -0,0 +1 @@ +#include "MSPd.h" static t_class *expflam_class; #define OBJECT_NAME "expflam~" #define MAXFLAMS (64) #define MAXATTACKS (128) #define STOPGAIN (.001) typedef struct { int attack_count; // number of triggers per flam event float *attack_times; // trigger times in seconds int *attack_points; // trigger times in samples int fdex; // current flam float gainatten; // attenuation factor float amp; // current amp int atks;// number of attacks per flam long counter; // internal clock short active; // flag that flam is turned on } t_flam; typedef struct _expflam { t_object x_obj; float x_f; t_flam *flams; // contain flams float start_delay; // initial flam delay float end_delay;// end delay float atten; // attenuation factor float slope;// slope of curve int atks;// number of attacks per flam float sr; float *trigvec; // hold input vector (to protect from memory sharing) float *bypvec; // ditto for flamgate vector short flamall; // flag to put a flam on everything short bypass; // flag to copy input to output without flam short flamgate_connected; // flag that a flamgate logical signal is connected to inlet 2 } t_expflam; void *expflam_new(void); t_int *expflam_perform(t_int *w); void expflam_dsp(t_expflam *x, t_signal **sp); void expflam_setflam(t_expflam *x, t_symbol *msg, short argc, t_atom *argv); void expflam_free(t_expflam *x); void expflam_assist(t_expflam *x, void *b, long msg, long arg, char *dst); void expflam_flamall(t_expflam *x, t_floatarg tog); void expflam_bypass(t_expflam *x, t_floatarg tog); void expflam_tilde_setup(void) { expflam_class = class_new(gensym("expflam~"),(t_newmethod)expflam_new, (t_method)expflam_free, sizeof(t_expflam), 0, 0); CLASS_MAINSIGNALIN(expflam_class,t_expflam, x_f ); class_addmethod(expflam_class,(t_method)expflam_dsp,gensym("dsp"),A_CANT,0); class_addmethod(expflam_class,(t_method)expflam_setflam,gensym("setflam"),A_GIMME,0); class_addmethod(expflam_class,(t_method)expflam_flamall,gensym("flamall"),A_FLOAT,0); class_addmethod(expflam_class,(t_method)expflam_bypass,gensym("bypass"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void expflam_flamall(t_expflam *x, t_floatarg tog) { x->flamall = (short) tog; } void expflam_bypass(t_expflam *x, t_floatarg tog) { x->bypass = (short) tog; } void expflam_assist(t_expflam *x, void *b, long msg, long arg, char *dst) { if (msg==1) { switch (arg) { case 0: sprintf(dst,"(signal) Trigger Click"); break; case 1: sprintf(dst,"(signal) Flam Gate"); break; } } else if (msg==2) { sprintf(dst,"(signal) Flam Clicks"); } } void *expflam_new(void) { int i; t_expflam *x = (t_expflam *)pd_new(expflam_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->flams = (t_flam *) calloc(MAXFLAMS, sizeof(t_flam)); for(i = 0; i < MAXFLAMS; i++){ x->flams[i].attack_times = (float *) calloc(MAXATTACKS, sizeof(float)); x->flams[i].attack_points = (int *) calloc(MAXATTACKS, sizeof(int)); } x->trigvec = malloc(8192 * sizeof(float)); // maximum vector size x->bypvec = malloc(8192 * sizeof(float)); // maximum vector size x->sr = sys_getsr(); x->start_delay = .025; x->end_delay = 0.1; x->slope = -3.0; x->atks = 8; x->atten = 0.8; x->bypass = 0; x->flamall = 0; return x; } void expflam_setflam(t_expflam *x, t_symbol *msg, short argc, t_atom *argv) { if( argc != 5 ){ error("%s: setflam format: startdelay enddelay attacks slope gainatten",OBJECT_NAME); return; } x->start_delay = atom_getfloatarg(0,argc,argv) * 0.001; x->end_delay = atom_getfloatarg(1,argc,argv) * 0.001; x->atks = (int) atom_getfloatarg(2,argc,argv); x->slope = atom_getfloatarg(3,argc,argv); x->atten = atom_getfloatarg(4,argc,argv); if(x->slope == 0) x->slope = .0001; if(x->start_delay <= 0) x->start_delay = .00001; if(x->end_delay <= 0) x->end_delay = .00001; if(x->atks < 2) x->atks = 2; if(x->atks > MAXATTACKS){ post("%s: exceeded maximum of %d attacks",OBJECT_NAME, MAXATTACKS); x->atks = MAXATTACKS; } } void expflam_free(t_expflam *x) { int i; free(x->trigvec); free(x->bypvec); for(i = 0; i < MAXFLAMS; i++){ free(x->flams[i].attack_times); free(x->flams[i].attack_points); } free(x->flams); } t_int *expflam_perform(t_int *w) { int i,j,k; t_expflam *x = (t_expflam *) (w[1]); float *in_vec = (t_float *)(w[2]); float *in2_vec = (t_float *)(w[3]); float *out_vec = (t_float *)(w[4]); int n = (int) w[5]; float *trigvec = x->trigvec; float *flamgate_vec = x->bypvec; t_flam *flams = x->flams; int atks = x->atks; float atten = x->atten; float slope = x->slope; float start_delay = x->start_delay; float end_delay = x->end_delay; float sr = x->sr; short flamgate_connected = x->flamgate_connected; short flamall = x->flamall; /* in flamgate mode copy input to output and return */ if(x->bypass){ memcpy( (void *)out_vec, (void *)in_vec, n * sizeof(float) ); return (w+6); } /* copy input vectors */ memcpy( (void *)flamgate_vec, (void *)in2_vec, n * sizeof(float) );// the order of these mcopies matters memcpy( (void *)trigvec, (void *)in_vec, n * sizeof(float) ); memcpy( (void *)out_vec, (void *)in_vec, n * sizeof(float) );// copy triggers to output for a start /* look for activation triggers */ for(i = 0; i < n; i++){ if(trigvec[i] && (flamgate_vec[i] || ! flamgate_connected || flamall ) ){ // post("triggered with t %f and flamgate %f",trigvec[i],flamgate_vec[i]); j = 0; while(flams[j].active && j < MAXFLAMS){ ++j; } if(j >= MAXFLAMS){ post("too many flams"); } else { // post("inserting flam at location %d",j); flams[j].active = 1; flams[j].attack_times[0] = 0.0; flams[j].attack_points[0] = i; flams[j].gainatten = atten; flams[j].amp = trigvec[i]; flams[j].counter = 0; flams[j].fdex = 0; flams[j].atks = atks; for(k = 1; k < atks; k++){ flams[j].attack_times[k] = start_delay + (end_delay - start_delay) * ((1.0 - exp((float)k * slope/((float)atks-1.0)))/(1.0-exp(slope))); flams[j].attack_times[k] += flams[j].attack_times[k - 1]; flams[j].attack_points[k] = flams[j].attack_times[k] * sr + i; } } } } /* now iterate through active flams */ for( i = 0; i < n; i++){ for(j = 0; j < MAXFLAMS; j++){ if(flams[j].active){ if(flams[j].counter >= flams[j].attack_points[flams[j].fdex]){ out_vec[i] += flams[j].amp; flams[j].amp *= flams[j].gainatten; if( flams[j].amp <= STOPGAIN ){ flams[j].active = 0; } flams[j].fdex++; if(flams[j].fdex >= flams[j].atks){ flams[j].active = 0; } } flams[j].counter++; } } } return w+6; } void expflam_dsp(t_expflam *x, t_signal **sp) { x->flamgate_connected = 1; dsp_add(expflam_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n ); } \ No newline at end of file diff --git a/externals/lyonpotpourri/fft.c b/externals/lyonpotpourri/fft.c new file mode 100755 index 000000000..d6bb1bc0b --- /dev/null +++ b/externals/lyonpotpourri/fft.c @@ -0,0 +1 @@ +#include "fftease.h" /* If forward is true, rfft replaces 2*N real data points in x with N complex values representing the positive frequency half of their Fourier spectrum, with x[1] replaced with the real part of the Nyquist frequency value. If forward is false, rfft expects x to contain a positive frequency spectrum arranged as before, and replaces it with 2*N real values. N MUST be a power of 2. */ void rfft( float *x, int N, int forward ) { float c1,c2, h1r,h1i, h2r,h2i, wr,wi, wpr,wpi, temp, theta; float xr,xi; int i, i1,i2,i3,i4, N2p1; static int first = 1; /*float PI, TWOPI;*/ void cfft(); if ( first ) { first = 0; } theta = PI/N; wr = 1.; wi = 0.; c1 = 0.5; if ( forward ) { c2 = -0.5; cfft( x, N, forward ); xr = x[0]; xi = x[1]; } else { c2 = 0.5; theta = -theta; xr = x[1]; xi = 0.; x[1] = 0.; } wpr = -2.*pow( sin( 0.5*theta ), 2. ); wpi = sin( theta ); N2p1 = (N<<1) + 1; for ( i = 0; i <= N>>1; i++ ) { i1 = i<<1; i2 = i1 + 1; i3 = N2p1 - i2; i4 = i3 + 1; if ( i == 0 ) { h1r = c1*(x[i1] + xr ); h1i = c1*(x[i2] - xi ); h2r = -c2*(x[i2] + xi ); h2i = c2*(x[i1] - xr ); x[i1] = h1r + wr*h2r - wi*h2i; x[i2] = h1i + wr*h2i + wi*h2r; xr = h1r - wr*h2r + wi*h2i; xi = -h1i + wr*h2i + wi*h2r; } else { h1r = c1*(x[i1] + x[i3] ); h1i = c1*(x[i2] - x[i4] ); h2r = -c2*(x[i2] + x[i4] ); h2i = c2*(x[i1] - x[i3] ); x[i1] = h1r + wr*h2r - wi*h2i; x[i2] = h1i + wr*h2i + wi*h2r; x[i3] = h1r - wr*h2r + wi*h2i; x[i4] = -h1i + wr*h2i + wi*h2r; } wr = (temp = wr)*wpr - wi*wpi + wr; wi = wi*wpr + temp*wpi + wi; } if ( forward ) x[1] = xr; else cfft( x, N, forward ); } /* cfft replaces float array x containing NC complex values (2*NC float values alternating real, imagininary, etc.) by its Fourier transform if forward is true, or by its inverse Fourier transform if forward is false, using a recursive Fast Fourier transform method due to Danielson and Lanczos. NC MUST be a power of 2. */ void cfft( float *x, int NC, int forward ) { float wr,wi, wpr,wpi, theta, scale; int mmax, ND, m, i,j, delta; void bitreverse(); ND = NC<<1; bitreverse( x, ND ); for ( mmax = 2; mmax < ND; mmax = delta ) { delta = mmax<<1; theta = TWOPI/( forward? mmax : -mmax ); wpr = -2.*pow( sin( 0.5*theta ), 2. ); wpi = sin( theta ); wr = 1.; wi = 0.; for ( m = 0; m < mmax; m += 2 ) { register float rtemp, itemp; for ( i = m; i < ND; i += delta ) { j = i + mmax; rtemp = wr*x[j] - wi*x[j+1]; itemp = wr*x[j+1] + wi*x[j]; x[j] = x[i] - rtemp; x[j+1] = x[i+1] - itemp; x[i] += rtemp; x[i+1] += itemp; } wr = (rtemp = wr)*wpr - wi*wpi + wr; wi = wi*wpr + rtemp*wpi + wi; } } /* scale output */ scale = forward ? 1./ND : 2.; { register float *xi=x, *xe=x+ND; while ( xi < xe ) *xi++ *= scale; } } /* bitreverse places float array x containing N/2 complex values into bit-reversed order */ void bitreverse( float *x, int N ) { float rtemp,itemp; int i,j, m; for ( i = j = 0; i < N; i += 2, j += m ) { if ( j > i ) { rtemp = x[j]; itemp = x[j+1]; /* complex exchange */ x[j] = x[i]; x[j+1] = x[i+1]; x[i] = rtemp; x[i+1] = itemp; } for ( m = N>>1; m >= 2 && j >= m; m >>= 1 ) j -= m; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/fft4.c b/externals/lyonpotpourri/fft4.c new file mode 100755 index 000000000..fb221181c --- /dev/null +++ b/externals/lyonpotpourri/fft4.c @@ -0,0 +1 @@ +#include <math.h> #include "fftease.h" void init_rdft(int n, int *ip, float *w) { int nw, nc; void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); nw = n >> 2; makewt(nw, ip, w); nc = n >> 2; makect(nc, ip, w + nw); return; } void rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; void bitrv2(int n, int *ip, float *a), cftsub(int n, float *a, float *w), rftsub(int n, float *a, int nc, float *c); nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { rftsub(n, a, nc, w + nw); bitrv2(n, ip + 2, a); } cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { bitrv2(n, ip + 2, a); } cftsub(n, a, w); if (n > 4) { rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void bitrv2(int n, int *ip, float *a) { int j, j1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += m2; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void cftsub(int n, float *a, float *w) { int j, j1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * (x0r - x0i); a[j1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * x0r - wk1i * x0i; a[j1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = a[j + 1] - a[j1 + 1]; a[j] += a[j1]; a[j + 1] += a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } } } void rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void makewt(int nw, int *ip, float *w) { void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } bitrv2(nw, ip + 2, w); } } void makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } \ No newline at end of file diff --git a/externals/lyonpotpourri/fftease.h b/externals/lyonpotpourri/fftease.h new file mode 100755 index 000000000..9d6e9cff4 --- /dev/null +++ b/externals/lyonpotpourri/fftease.h @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> +#include <string.h> + + +/* +The new improved fftease.h +*/ + +#define getbytes t_getbytes +#define freebytes t_freebytes +#define resizebytes t_resizebytes + +#define FFTEASE_ANNOUNCEMENT "- a member of FFTease 2.52" + +#ifndef PI +#define PI 3.141592653589793115997963468544185161590576171875 +#endif + +#ifndef TWOPI +#define TWOPI 6.28318530717958623199592693708837032318115234375 +#endif + +#define MAX_N (16384) +#define MAX_N2 (MAX_N/2) +#define MAX_Nw (MAX_N * 4) + +void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); +void unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ); +void rfft( float *x, int N, int forward ); +void cfft( float *x, int NC, int forward ); +void bitreverse( float *x, int N ); +void fold( float *I, float *W, int Nw, float *O, int N, int n ); +void init_rdft(int n, int *ip, float *w); +void rdft(int n, int isgn, float *a, int *ip, float *w); +void bitrv2(int n, int *ip, float *a); +void cftsub(int n, float *a, float *w); +void rftsub(int n, float *a, int nc, float *c); +void makewt(int nw, int *ip, float *w); +void makect(int nc, int *ip, float *c); +void leanconvert( float *S, float *C, int N2 ); +void leanunconvert( float *C, float *S, int N2 ); +void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); +void makehamming( float *H, float *A, float *S, int Nw, int N, int I,int odd ); +void makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); +void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ); +void bloscbank( float *S, float *O, int D, float iD, float *lf, float *la, + float *bindex, float *tab, int len, float synt, int lo, int hi ); + +float randf( float min, float max ); +int randi( int min, int max ); +int power_of_two(int test); + + +void freebytes2(void *fatso, size_t nbytes); +void *getbytes2(size_t nbytes); +void *resizebytes2(void *old, size_t oldsize, size_t newsize); +void limit_fftsize(int *N, int *Nw, char *OBJECT_NAME); + +/* THE FUNCTIONS */ diff --git a/externals/lyonpotpourri/fftease_oldskool.h b/externals/lyonpotpourri/fftease_oldskool.h new file mode 100755 index 000000000..65a382da2 --- /dev/null +++ b/externals/lyonpotpourri/fftease_oldskool.h @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> +#include <string.h> + + +/* +The new improved fftease.h +*/ + + +#define FFTEASE_ANNOUNCEMENT "- a member of FFTease 2.52" + +#ifndef PI +#define PI 3.141592653589793115997963468544185161590576171875 +#endif + +#ifndef TWOPI +#define TWOPI 6.28318530717958623199592693708837032318115234375 +#endif + +#define MAX_N (16384) +#define MAX_N2 (MAX_N/2) +#define MAX_Nw (MAX_N * 4) + +void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); +void unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ); +void rfft( float *x, int N, int forward ); +void cfft( float *x, int NC, int forward ); +void bitreverse( float *x, int N ); +void fold( float *I, float *W, int Nw, float *O, int N, int n ); +void init_rdft(int n, int *ip, float *w); +void rdft(int n, int isgn, float *a, int *ip, float *w); +void bitrv2(int n, int *ip, float *a); +void cftsub(int n, float *a, float *w); +void rftsub(int n, float *a, int nc, float *c); +void makewt(int nw, int *ip, float *w); +void makect(int nc, int *ip, float *c); +void leanconvert( float *S, float *C, int N2 ); +void leanunconvert( float *C, float *S, int N2 ); +void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); +void makehamming( float *H, float *A, float *S, int Nw, int N, int I,int odd ); +void makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); +void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ); +void bloscbank( float *S, float *O, int D, float iD, float *lf, float *la, + float *bindex, float *tab, int len, float synt, int lo, int hi ); + +float randf( float min, float max ); +int randi( int min, int max ); +int power_of_two(int test); + + +void freebytes2(void *fatso, size_t nbytes); +void *getbytes2(size_t nbytes); +void *resizebytes2(void *old, size_t oldsize, size_t newsize); +void limit_fftsize(int *N, int *Nw, char *OBJECT_NAME); + +/* THE FUNCTIONS */ diff --git a/externals/lyonpotpourri/fftease_setup.c b/externals/lyonpotpourri/fftease_setup.c new file mode 100755 index 000000000..3243f0912 --- /dev/null +++ b/externals/lyonpotpourri/fftease_setup.c @@ -0,0 +1,5 @@ +void fftease_setup(void) +{ + // post("Loaded FFTease Library"); + // printf("Loaded FFTease Library(2)"); +} diff --git a/externals/lyonpotpourri/flanjah~-help.pd b/externals/lyonpotpourri/flanjah~-help.pd new file mode 100755 index 000000000..2c59f9a5a --- /dev/null +++ b/externals/lyonpotpourri/flanjah~-help.pd @@ -0,0 +1,62 @@ +#N canvas 698 193 450 406 10; +#X obj 26 104 phasor~ 350; +#X obj 124 294 *~ 0.1; +#X obj 124 341 dac~; +#X obj 124 79 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 135 154 5 -0.5 0.5 2 feedback feedback -, f 5; +#X floatatom 195 153 5 0 0 2 speed1 speed1 -, f 5; +#X floatatom 244 151 5 0 0 2 speed2 speed2 -, f 5; +#X floatatom 295 152 5 0 1 2 depth depth -, f 5; +#X floatatom 189 320 5 0 0 0 - - -, f 5; +#X msg 124 106 protect \$1; +#X obj 124 259 flanjah~; +#X obj 258 264 hsl 128 15 -0.425 0.425 0 0 feedback feedback-in feedback +-2 -6 0 8 -167887 -1 -1 12326 1; +#X obj 258 293 hsl 128 15 0 4 0 0 speed1 speed1-in speed1 -2 -6 0 8 +-167887 -1 -1 1048 1; +#X obj 258 322 hsl 128 15 0 4 0 0 speed2 speed2-in speed2 -2 -6 0 8 +-167887 -1 -1 794 1; +#X obj 258 350 hsl 128 15 0 1 0 0 depth depth-in depth -2 -6 0 8 -167887 +-1 -1 1524 1; +#X text 145 76 protect from dangerous feedback; +#X obj 189 276 vsl 15 32 0 0.5 0 0 empty empty gain 0 -8 0 8 -261728 +-1 -1 0 1; +#X obj 26 129 killdc~; +#X obj 23 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X floatatom 26 82 5 0 0 0 - - -, f 5; +#X text 22 45 flanjah~ - A simple flanger; +#N canvas 339 464 318 192 initialize 0; +#X msg 172 66 0.33; +#X msg 187 87 0.25; +#X obj 207 22 loadbang; +#X msg 207 107 0.12; +#X msg 163 45 0.4; +#X obj 37 62 s feedback-in; +#X obj 39 82 s speed1-in; +#X obj 39 104 s speed2-in; +#X obj 40 123 s depth-in; +#X connect 0 0 6 0; +#X connect 1 0 7 0; +#X connect 2 0 4 0; +#X connect 2 0 0 0; +#X connect 2 0 1 0; +#X connect 2 0 3 0; +#X connect 3 0 8 0; +#X connect 4 0 5 0; +#X restore 303 218 pd initialize; +#X connect 0 0 17 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 9 0; +#X connect 4 0 10 1; +#X connect 5 0 10 2; +#X connect 6 0 10 3; +#X connect 7 0 10 4; +#X connect 8 0 1 1; +#X connect 9 0 10 0; +#X connect 10 0 1 0; +#X connect 16 0 8 0; +#X connect 17 0 10 0; +#X connect 19 0 0 0; diff --git a/externals/lyonpotpourri/flanjah~.c b/externals/lyonpotpourri/flanjah~.c new file mode 100755 index 000000000..f3c2d06a3 --- /dev/null +++ b/externals/lyonpotpourri/flanjah~.c @@ -0,0 +1,333 @@ +#include "MSPd.h" + +/* pointless comment */ + +#define F_LEN 65536 + + +static t_class *flanjah_class; + + +#define OBJECT_NAME "flanjah~" + +typedef struct _flanjah +{ + + t_object x_obj; + float x_f; + // + float *sinetab; + float si_factor; + float osc1_phs; + float osc1_si; + float si1; + float osc2_phs; + float osc2_si; + float si2; + // + float speed1; + float speed2; + float feedback; + float maxdel; + float depth; + // + float *ddl1 ; + int ddl1_len; + int ddl1_phs; + float *ddl2 ; + int ddl2_len; + int ddl2_phs; + // + float tap1; + float tap2; + // + int feedback_connected; + int speed1_connected; + int speed2_connected; + int depth_connected; + short connected[8]; + int feedback_protect; + short mute; + float sr; +} t_flanjah; + +t_int *flanjah_perform(t_int *w); + +void flanjah_protect(t_flanjah *x, t_floatarg state); +void flanjah_mute(t_flanjah *x, t_floatarg state); +void flanjah_dsp(t_flanjah *x, t_signal **sp); +void *flanjah_new(t_symbol *s, int argc, t_atom *argv); +void flanjah_dsp_free( t_flanjah *x ); +void flanjah_report( t_flanjah *x ); +void flanjah_float(t_flanjah *x, double f); +void flanjah_init(t_flanjah *x,short initialized); + +void flanjah_tilde_setup(void){ + flanjah_class = class_new(gensym("flanjah~"), (t_newmethod)flanjah_new, + (t_method)flanjah_dsp_free,sizeof(t_flanjah), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(flanjah_class, t_flanjah, x_f); + class_addmethod(flanjah_class,(t_method)flanjah_dsp,gensym("dsp"),0); + class_addmethod(flanjah_class,(t_method)flanjah_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(flanjah_class,(t_method)flanjah_protect,gensym("protect"),A_FLOAT,0); + class_addmethod(flanjah_class,(t_method)flanjah_report,gensym("report"),0); + potpourri_announce(OBJECT_NAME); +} + +void flanjah_report( t_flanjah *x ){ + post("feedback: %f", x->feedback); + post("depth: %f", x->depth); + post("si1: %f", x->osc1_si); + post("si2: %f", x->osc2_si); + post("speed1: %f", x->speed1); + post("speed2: %f", x->speed2); + post("phase1: %f", x->osc1_phs); + post("phase2: %f", x->osc2_phs); +} + +void flanjah_dsp_free( t_flanjah *x ){ + free(x->sinetab); + free(x->ddl1); + free(x->ddl2); +} + + +t_int *flanjah_perform(t_int *w) +{ + t_flanjah *x = (t_flanjah *)(w[1]); + t_float *in1 = (t_float *)(w[2]); + t_float *feedback_vec = (t_float *)(w[3]); + t_float *speed1_vec = (t_float *)(w[4]); + t_float *speed2_vec = (t_float *)(w[5]); + t_float *depth_vec = (t_float *)(w[6]); + t_float *out1 = (t_float *)(w[7]); + int n = (int) w[8]; + float fdelay1, fdelay2; + int idelay1, idelay2; + float insamp1;//, insamp2; + float frac; + int index1, index2; + float m1, m2; + // + float osc2_phs = x->osc2_phs; + int ddl2_len = x->ddl2_len; + float osc2_si = x->osc2_si; + float *ddl2 = x->ddl2; + int ddl2_phs = x->ddl2_phs; + float *ddl1 = x->ddl1; + float *sinetab = x->sinetab; + int ddl1_phs = x->ddl1_phs; + int ddl1_len = x->ddl1_len; + float osc1_phs = x->osc1_phs; + float osc1_si = x->osc1_si; + float tap1 = x->tap1; + float tap2 = x->tap2; + float feedback = x->feedback; + int feedback_connected = x->feedback_connected; + int speed1_connected = x->speed1_connected; + int speed2_connected = x->speed2_connected; + int depth_connected = x->depth_connected; + float si_factor = x->si_factor; + int feedback_protect = x->feedback_protect; + float depth_factor = x->depth; + /**********************/ + + if( x->mute ){ + while( n-- ){ + *out1++ = 0.0; + } + return (w+9); + } + while( n-- ){ + // Pull Data off Signal buffers + insamp1 = *in1++; + if( feedback_connected ){ + feedback = *feedback_vec++; + + } + if( feedback_protect ) { + if( feedback > 0.425){ + feedback = 0.425; + } + if( feedback < -0.425 ) + feedback = -0.425; + } + + if( speed1_connected ){ + osc1_si = *speed1_vec++ * si_factor; + } + if( speed2_connected ){ + osc2_si = *speed2_vec++ * si_factor; + } + if( depth_connected ){ + depth_factor = *depth_vec++; + } + + if( depth_factor < .0001 ){ + depth_factor = .0001; + } + if( depth_factor > 1. ){ + depth_factor = 1.; + } + + fdelay1 = sinetab[ (int) osc1_phs ] * (float) ddl1_len * depth_factor; + fdelay2 = sinetab[ (int) osc2_phs ] * (float) ddl2_len * depth_factor; + + // DSP Proper + + idelay1 = fdelay1; + osc1_phs += osc1_si; + while( osc1_phs >= F_LEN ) + osc1_phs -= F_LEN; + while( osc1_phs < 0 ) + osc1_phs += F_LEN; + + + + + idelay2 = fdelay2; + osc2_phs += osc2_si; + while( osc2_phs >= F_LEN ) + osc2_phs -= F_LEN; + while( osc1_phs < 0 ) + osc2_phs += F_LEN; + + ddl1[ ddl1_phs++ ] = insamp1 + feedback * (tap1+tap2); + ddl1_phs = ddl1_phs % ddl1_len; + // linear interpolated lookup + index1 = (ddl1_phs + idelay1) % ddl1_len; + index2 = (index1 + 1) % ddl1_len ; + frac = fdelay1 - idelay1 ; + m1 = 1. - frac; + m2 = frac; + tap1 = m1 * ddl1[ index1 ] + m2 * ddl1[ index2 ]; + + ddl2[ ddl2_phs++ ] = tap1; + ddl2_phs = ddl2_phs % ddl2_len; + index1 = (ddl2_phs + idelay2) % ddl2_len; + index2 = (index1 + 1) % ddl2_len ; + frac = fdelay2 - idelay2 ; + m1 = 1. - frac; + m2 = frac; + tap2 = m1 * ddl2[ index1 ] + m2 * ddl2[ index2 ]; + *out1++ = (insamp1+tap2) * 0.2; + + + /// + + } + x->ddl1_phs = ddl1_phs; + x->osc1_phs = osc1_phs; + x->ddl2_phs = ddl2_phs; + x->osc2_phs = osc2_phs; + x->tap1 = tap1; + x->tap2 = tap2; + // DSP CONFIG + return (w+9); +} + + +// void lop_dsp(t_lop *x, t_signal **sp, short *count) +void flanjah_dsp(t_flanjah *x, t_signal **sp) +{ + + x->feedback_connected = 1; + x->speed1_connected = 1; + x->speed2_connected = 1; + x->depth_connected = 1; + + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + flanjah_init(x,1); + } + dsp_add(flanjah_perform, 8, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, sp[5]->s_vec, + sp[0]->s_n); +} + +void flanjah_mute(t_flanjah *x, t_floatarg state) +{ + x->mute = state; +} + +void flanjah_protect(t_flanjah *x, t_floatarg state) +{ + x->feedback_protect = state; + // post("feedback proctection set to %d",x->feedback_protect); +} + +void flanjah_init(t_flanjah *x,short initialized) +{ + int i; + if( x->maxdel < .0001 ){ + x->maxdel = .0001; + error("below minimum of 0.01 ms"); + } + if( x->maxdel > 360000. ){ + x->maxdel = 360000.; + error("above maximum of 360 seconds"); + } + + x->si_factor = (float)F_LEN / x->sr; + x->ddl1_len = x->maxdel * x->sr ; + x->ddl1_phs = 0; + x->ddl2_len = x->maxdel * x->sr ; + x->ddl2_phs = 0; + x->osc1_si = x->si_factor * x->speed1; + x->osc1_phs = 0; + x->osc2_si = x->si_factor * x->speed2; + x->osc2_phs = 0; + + x->tap1 = x->tap2 = 0; + if(!initialized){ + x->ddl1 = (float *) calloc(x->ddl1_len + 2, sizeof(float)); + x->ddl2 = (float *) calloc(x->ddl2_len + 2, sizeof(float)); + x->sinetab = (float *) calloc(F_LEN,sizeof(float)); + for( i = 0; i < F_LEN ; i++ ){ + x->sinetab[i] = 0.51 - 0.47 * cos( TWOPI * (float) i / (float) F_LEN); + } + } else { + x->ddl1 = (float *) realloc(x->ddl1,(x->ddl1_len + 2) * sizeof(float)); + x->ddl2 = (float *) realloc(x->ddl2,(x->ddl2_len + 2) * sizeof(float)); + } +} + +void *flanjah_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_flanjah *x = (t_flanjah *)pd_new(flanjah_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->sr = sys_getsr(); + if(!x->sr){ + error("zero sampling rate - set to 44100"); + x->sr = 44100; + } + + // SET DEFAULTS + + x->maxdel = .05; // in seconds + x->feedback = 0.7; + x->speed1 = 0.136; + x->speed2 = 0.183; + x->feedback_protect = 1; + x->depth = 1.0; + + if( argc > 0 ) + x->maxdel = atom_getfloatarg(0,argc,argv)/1000.0; + if( argc > 1 ) + x->feedback = atom_getfloatarg(1,argc,argv); + if( argc > 2 ) + x->speed1 = atom_getfloatarg(2,argc,argv); + if( argc > 3 ) + x->speed2 = atom_getfloatarg(3,argc,argv); + if( argc > 4 ) + x->depth = atom_getfloatarg(4,argc,argv); + + flanjah_init(x,0); + return (x); +} + diff --git a/externals/lyonpotpourri/fold.c b/externals/lyonpotpourri/fold.c new file mode 100755 index 000000000..0523d28fc --- /dev/null +++ b/externals/lyonpotpourri/fold.c @@ -0,0 +1 @@ +#include "fftease.h" /* * multiply current input I by window W (both of length Nw); * using modulus arithmetic, fold and rotate windowed input * into output array O of (FFT) length N according to current * input time n */ void fold( float *I, float *W, int Nw, float *O, int N, int n ) { int i; for ( i = 0; i < N; i++ ) O[i] = 0.; while ( n < 0 ) n += N; n %= N; for ( i = 0; i < Nw; i++ ) { O[n] += I[i]*W[i]; if ( ++n == N ) n = 0; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/from_msp.c b/externals/lyonpotpourri/from_msp.c new file mode 100755 index 000000000..04ab90461 --- /dev/null +++ b/externals/lyonpotpourri/from_msp.c @@ -0,0 +1 @@ + #include "MSPd.h" void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av) { if (c&&ac&&av&&(idx<ac)) { *c = atom_getfloat(av+idx); } } void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av) { if (c&&ac&&av&&(idx<ac)) { *c = atom_getsymbol(av+idx); } } \ No newline at end of file diff --git a/externals/lyonpotpourri/function~-help.pd b/externals/lyonpotpourri/function~-help.pd new file mode 100755 index 000000000..03baceb91 --- /dev/null +++ b/externals/lyonpotpourri/function~-help.pd @@ -0,0 +1,1308 @@ +#N canvas 345 100 446 350 10; +#X obj 65 126 function~ putty; +#N canvas 0 22 450 300 (subpatch) 0; +#X array putty 8192 float 3; +#A 0 1.52302e-08 1.53646e-08 1.55002e-08 1.56369e-08 1.57749e-08 1.5914e-08 +1.60543e-08 1.61957e-08 1.63385e-08 1.64824e-08 1.66276e-08 1.6774e-08 +1.69216e-08 1.70705e-08 1.72207e-08 1.73722e-08 1.7525e-08 1.76791e-08 +1.78345e-08 1.79912e-08 1.81493e-08 1.83087e-08 1.84695e-08 1.86316e-08 +1.87951e-08 1.896e-08 1.91264e-08 1.92941e-08 1.94633e-08 1.96339e-08 +1.9806e-08 1.99795e-08 2.01545e-08 2.0331e-08 2.0509e-08 2.06886e-08 +2.08696e-08 2.10522e-08 2.12363e-08 2.1422e-08 2.16093e-08 2.17981e-08 +2.19886e-08 2.21807e-08 2.23744e-08 2.25698e-08 2.27668e-08 2.29655e-08 +2.31659e-08 2.33679e-08 2.35718e-08 2.37773e-08 2.39845e-08 2.41935e-08 +2.44043e-08 2.46168e-08 2.48312e-08 2.50473e-08 2.52654e-08 2.54852e-08 +2.57069e-08 2.59305e-08 2.61559e-08 2.63833e-08 2.66126e-08 2.68437e-08 +2.70769e-08 2.73121e-08 2.75492e-08 2.77883e-08 2.80294e-08 2.82726e-08 +2.85178e-08 2.8765e-08 2.90144e-08 2.92659e-08 2.95194e-08 2.97752e-08 +3.0033e-08 3.0293e-08 3.05552e-08 3.08196e-08 3.10863e-08 3.13552e-08 +3.16263e-08 3.18997e-08 3.21754e-08 3.24534e-08 3.27337e-08 3.30164e-08 +3.33015e-08 3.3589e-08 3.38788e-08 3.41711e-08 3.44659e-08 3.4763e-08 +3.50628e-08 3.53649e-08 3.56697e-08 3.5977e-08 3.62868e-08 3.65993e-08 +3.69143e-08 3.7232e-08 3.75523e-08 3.78753e-08 3.82011e-08 3.85295e-08 +3.88606e-08 3.91946e-08 3.95313e-08 3.98708e-08 4.02131e-08 4.05583e-08 +4.09064e-08 4.12574e-08 4.16113e-08 4.19681e-08 4.2328e-08 4.26907e-08 +4.30566e-08 4.34254e-08 4.37974e-08 4.41724e-08 4.45505e-08 4.49318e-08 +4.53163e-08 4.57039e-08 4.60948e-08 4.64888e-08 4.68862e-08 4.72869e-08 +4.76908e-08 4.80982e-08 4.85089e-08 4.89229e-08 4.93405e-08 4.97615e-08 +5.0186e-08 5.0614e-08 5.10455e-08 5.14806e-08 5.19193e-08 5.23616e-08 +5.28076e-08 5.32572e-08 5.37106e-08 5.41677e-08 5.46286e-08 5.50933e-08 +5.55619e-08 5.60342e-08 5.65105e-08 5.69907e-08 5.74749e-08 5.79631e-08 +5.84552e-08 5.89515e-08 5.94518e-08 5.99562e-08 6.04648e-08 6.09775e-08 +6.14946e-08 6.20158e-08 6.25413e-08 6.30711e-08 6.36053e-08 6.41438e-08 +6.46869e-08 6.52343e-08 6.57863e-08 6.63428e-08 6.69038e-08 6.74694e-08 +6.80397e-08 6.86146e-08 6.91943e-08 6.97786e-08 7.03679e-08 7.09619e-08 +7.15607e-08 7.21645e-08 7.27733e-08 7.33868e-08 7.40056e-08 7.46293e-08 +7.52582e-08 7.58922e-08 7.65314e-08 7.71757e-08 7.78254e-08 7.84803e-08 +7.91406e-08 7.98062e-08 8.04774e-08 8.11539e-08 8.1836e-08 8.25236e-08 +8.32169e-08 8.39157e-08 8.46203e-08 8.53305e-08 8.60467e-08 8.67685e-08 +8.74963e-08 8.823e-08 8.89696e-08 8.97152e-08 9.04669e-08 9.12247e-08 +9.19887e-08 9.27589e-08 9.35352e-08 9.43179e-08 9.5107e-08 9.59023e-08 +9.67043e-08 9.75126e-08 9.83276e-08 9.91491e-08 9.99773e-08 1.00812e-07 +1.01654e-07 1.02502e-07 1.03357e-07 1.0422e-07 1.05089e-07 1.05965e-07 +1.06848e-07 1.07739e-07 1.08636e-07 1.09541e-07 1.10453e-07 1.11373e-07 +1.123e-07 1.13234e-07 1.14176e-07 1.15125e-07 1.16083e-07 1.17047e-07 +1.1802e-07 1.19e-07 1.19989e-07 1.20985e-07 1.21989e-07 1.23002e-07 +1.24022e-07 1.25051e-07 1.26088e-07 1.27133e-07 1.28187e-07 1.29249e-07 +1.30319e-07 1.31399e-07 1.32486e-07 1.33583e-07 1.34688e-07 1.35803e-07 +1.36926e-07 1.38058e-07 1.39199e-07 1.4035e-07 1.41509e-07 1.42678e-07 +1.43856e-07 1.45044e-07 1.46241e-07 1.47447e-07 1.48664e-07 1.4989e-07 +1.51125e-07 1.52371e-07 1.53627e-07 1.54892e-07 1.56168e-07 1.57454e-07 +1.5875e-07 1.60056e-07 1.61373e-07 1.627e-07 1.64038e-07 1.65387e-07 +1.66746e-07 1.68116e-07 1.69497e-07 1.70889e-07 1.72292e-07 1.73706e-07 +1.75131e-07 1.76568e-07 1.78016e-07 1.79476e-07 1.80947e-07 1.8243e-07 +1.83924e-07 1.85431e-07 1.86949e-07 1.8848e-07 1.90022e-07 1.91577e-07 +1.93144e-07 1.94723e-07 1.96315e-07 1.9792e-07 1.99537e-07 2.01167e-07 +2.0281e-07 2.04466e-07 2.06135e-07 2.07817e-07 2.09512e-07 2.11221e-07 +2.12943e-07 2.14679e-07 2.16429e-07 2.18192e-07 2.19969e-07 2.2176e-07 +2.23565e-07 2.25385e-07 2.27219e-07 2.29067e-07 2.3093e-07 2.32807e-07 +2.34699e-07 2.36606e-07 2.38529e-07 2.40466e-07 2.42418e-07 2.44386e-07 +2.46369e-07 2.48368e-07 2.50382e-07 2.52412e-07 2.54458e-07 2.5652e-07 +2.58599e-07 2.60693e-07 2.62804e-07 2.64932e-07 2.67076e-07 2.69237e-07 +2.71414e-07 2.73609e-07 2.75821e-07 2.7805e-07 2.80297e-07 2.82561e-07 +2.84843e-07 2.87143e-07 2.89461e-07 2.91797e-07 2.9415e-07 2.96523e-07 +2.98914e-07 3.01323e-07 3.03751e-07 3.06198e-07 3.08665e-07 3.1115e-07 +3.13655e-07 3.16179e-07 3.18723e-07 3.21286e-07 3.2387e-07 3.26474e-07 +3.29098e-07 3.31742e-07 3.34406e-07 3.37092e-07 3.39798e-07 3.42525e-07 +3.45274e-07 3.48043e-07 3.50835e-07 3.53647e-07 3.56482e-07 3.59338e-07 +3.62217e-07 3.65118e-07 3.68041e-07 3.70987e-07 3.73956e-07 3.76948e-07 +3.79963e-07 3.83001e-07 3.86062e-07 3.89147e-07 3.92256e-07 3.95389e-07 +3.98547e-07 4.01728e-07 4.04934e-07 4.08165e-07 4.11421e-07 4.14701e-07 +4.18007e-07 4.21339e-07 4.24696e-07 4.28079e-07 4.31488e-07 4.34923e-07 +4.38385e-07 4.41873e-07 4.45388e-07 4.4893e-07 4.52499e-07 4.56095e-07 +4.5972e-07 4.63372e-07 4.67052e-07 4.7076e-07 4.74496e-07 4.78262e-07 +4.82056e-07 4.85879e-07 4.89731e-07 4.93613e-07 4.97525e-07 5.01466e-07 +5.05438e-07 5.0944e-07 5.13473e-07 5.17536e-07 5.2163e-07 5.25756e-07 +5.29914e-07 5.34102e-07 5.38323e-07 5.42576e-07 5.46862e-07 5.5118e-07 +5.55531e-07 5.59915e-07 5.64333e-07 5.68784e-07 5.73269e-07 5.77789e-07 +5.82343e-07 5.86931e-07 5.91554e-07 5.96212e-07 6.00906e-07 6.05635e-07 +6.104e-07 6.15202e-07 6.2004e-07 6.24914e-07 6.29826e-07 6.34775e-07 +6.39761e-07 6.44785e-07 6.49847e-07 6.54948e-07 6.60087e-07 6.65265e-07 +6.70482e-07 6.75739e-07 6.81035e-07 6.86371e-07 6.91748e-07 6.97166e-07 +7.02624e-07 7.08123e-07 7.13664e-07 7.19247e-07 7.24873e-07 7.3054e-07 +7.3625e-07 7.42003e-07 7.478e-07 7.5364e-07 7.59524e-07 7.65452e-07 +7.71426e-07 7.77443e-07 7.83506e-07 7.89615e-07 7.95771e-07 8.01971e-07 +8.08219e-07 8.14513e-07 8.20856e-07 8.27245e-07 8.33682e-07 8.40168e-07 +8.46702e-07 8.53285e-07 8.59918e-07 8.666e-07 8.73333e-07 8.80116e-07 +8.86949e-07 8.93834e-07 9.0077e-07 9.07758e-07 9.14798e-07 9.21891e-07 +9.29038e-07 9.36237e-07 9.4349e-07 9.50797e-07 9.58159e-07 9.65576e-07 +9.73048e-07 9.80576e-07 9.8816e-07 9.958e-07 1.0035e-06 1.01125e-06 +1.01906e-06 1.02693e-06 1.03486e-06 1.04285e-06 1.0509e-06 1.05901e-06 +1.06717e-06 1.0754e-06 1.08369e-06 1.09204e-06 1.10046e-06 1.10893e-06 +1.11747e-06 1.12607e-06 1.13474e-06 1.14347e-06 1.15226e-06 1.16112e-06 +1.17004e-06 1.17904e-06 1.18809e-06 1.19722e-06 1.20641e-06 1.21567e-06 +1.225e-06 1.2344e-06 1.24386e-06 1.2534e-06 1.26301e-06 1.27269e-06 +1.28243e-06 1.29226e-06 1.30215e-06 1.31212e-06 1.32216e-06 1.33227e-06 +1.34246e-06 1.35272e-06 1.36306e-06 1.37348e-06 1.38397e-06 1.39454e-06 +1.40519e-06 1.41591e-06 1.42672e-06 1.4376e-06 1.44856e-06 1.45961e-06 +1.47073e-06 1.48194e-06 1.49323e-06 1.5046e-06 1.51605e-06 1.52759e-06 +1.53921e-06 1.55092e-06 1.56272e-06 1.57459e-06 1.58656e-06 1.59862e-06 +1.61076e-06 1.62299e-06 1.63531e-06 1.64772e-06 1.66022e-06 1.67282e-06 +1.6855e-06 1.69828e-06 1.71115e-06 1.72411e-06 1.73717e-06 1.75032e-06 +1.76357e-06 1.77692e-06 1.79036e-06 1.8039e-06 1.81754e-06 1.83128e-06 +1.84512e-06 1.85906e-06 1.8731e-06 1.88724e-06 1.90149e-06 1.91584e-06 +1.93029e-06 1.94485e-06 1.95951e-06 1.97428e-06 1.98916e-06 2.00414e-06 +2.01924e-06 2.03444e-06 2.04975e-06 2.06517e-06 2.08071e-06 2.09635e-06 +2.11212e-06 2.12799e-06 2.14398e-06 2.16008e-06 2.1763e-06 2.19264e-06 +2.2091e-06 2.22567e-06 2.24237e-06 2.25918e-06 2.27611e-06 2.29317e-06 +2.31035e-06 2.32766e-06 2.34508e-06 2.36264e-06 2.38032e-06 2.39813e-06 +2.41606e-06 2.43413e-06 2.45232e-06 2.47065e-06 2.4891e-06 2.50769e-06 +2.52642e-06 2.54527e-06 2.56426e-06 2.58339e-06 2.60266e-06 2.62206e-06 +2.6416e-06 2.66129e-06 2.68111e-06 2.70107e-06 2.72118e-06 2.74143e-06 +2.76183e-06 2.78237e-06 2.80306e-06 2.8239e-06 2.84488e-06 2.86602e-06 +2.8873e-06 2.90874e-06 2.93034e-06 2.95208e-06 2.97398e-06 2.99604e-06 +3.01825e-06 3.04062e-06 3.06315e-06 3.08584e-06 3.10869e-06 3.13171e-06 +3.15489e-06 3.17823e-06 3.20174e-06 3.22541e-06 3.24926e-06 3.27327e-06 +3.29746e-06 3.32181e-06 3.34634e-06 3.37104e-06 3.39592e-06 3.42097e-06 +3.4462e-06 3.47161e-06 3.4972e-06 3.52297e-06 3.54892e-06 3.57506e-06 +3.60138e-06 3.62788e-06 3.65458e-06 3.68146e-06 3.70853e-06 3.73579e-06 +3.76325e-06 3.7909e-06 3.81874e-06 3.84678e-06 3.87502e-06 3.90346e-06 +3.9321e-06 3.96093e-06 3.98997e-06 4.01922e-06 4.04867e-06 4.07833e-06 +4.1082e-06 4.13828e-06 4.16856e-06 4.19906e-06 4.22978e-06 4.26071e-06 +4.29186e-06 4.32322e-06 4.35481e-06 4.38662e-06 4.41865e-06 4.4509e-06 +4.48338e-06 4.51609e-06 4.54903e-06 4.58219e-06 4.61559e-06 4.64922e-06 +4.68309e-06 4.71719e-06 4.75153e-06 4.78612e-06 4.82094e-06 4.856e-06 +4.89131e-06 4.92687e-06 4.96268e-06 4.99873e-06 5.03503e-06 5.07159e-06 +5.10841e-06 5.14547e-06 5.1828e-06 5.22038e-06 5.25823e-06 5.29634e-06 +5.33472e-06 5.37336e-06 5.41227e-06 5.45145e-06 5.4909e-06 5.53062e-06 +5.57063e-06 5.6109e-06 5.65146e-06 5.6923e-06 5.73342e-06 5.77482e-06 +5.81652e-06 5.8585e-06 5.90077e-06 5.94333e-06 5.98619e-06 6.02934e-06 +6.07279e-06 6.11654e-06 6.1606e-06 6.20495e-06 6.24962e-06 6.29459e-06 +6.33987e-06 6.38546e-06 6.43137e-06 6.47759e-06 6.52414e-06 6.571e-06 +6.61819e-06 6.66569e-06 6.71353e-06 6.76169e-06 6.81019e-06 6.85902e-06 +6.90818e-06 6.95768e-06 7.00752e-06 7.0577e-06 7.10823e-06 7.1591e-06 +7.21033e-06 7.2619e-06 7.31382e-06 7.36611e-06 7.41875e-06 7.47174e-06 +7.52511e-06 7.57883e-06 7.63293e-06 7.68739e-06 7.74223e-06 7.79744e-06 +7.85303e-06 7.90899e-06 7.96534e-06 8.02207e-06 8.07919e-06 8.1367e-06 +8.19459e-06 8.25289e-06 8.31158e-06 8.37067e-06 8.43016e-06 8.49006e-06 +8.55037e-06 8.61108e-06 8.6722e-06 8.73375e-06 8.79571e-06 8.85809e-06 +8.92089e-06 8.98412e-06 9.04778e-06 9.11187e-06 9.17639e-06 9.24135e-06 +9.30676e-06 9.3726e-06 9.43888e-06 9.50562e-06 9.57281e-06 9.64045e-06 +9.70855e-06 9.77712e-06 9.84614e-06 9.91563e-06 9.98559e-06 1.0056e-05 +1.01269e-05 1.01983e-05 1.02702e-05 1.03425e-05 1.04154e-05 1.04887e-05 +1.05625e-05 1.06368e-05 1.07116e-05 1.0787e-05 1.08628e-05 1.09391e-05 +1.1016e-05 1.10933e-05 1.11712e-05 1.12496e-05 1.13286e-05 1.1408e-05 +1.1488e-05 1.15685e-05 1.16496e-05 1.17312e-05 1.18134e-05 1.18961e-05 +1.19794e-05 1.20632e-05 1.21476e-05 1.22325e-05 1.2318e-05 1.24041e-05 +1.24908e-05 1.2578e-05 1.26658e-05 1.27542e-05 1.28432e-05 1.29328e-05 +1.3023e-05 1.31138e-05 1.32052e-05 1.32972e-05 1.33898e-05 1.3483e-05 +1.35768e-05 1.36713e-05 1.37664e-05 1.38621e-05 1.39585e-05 1.40555e-05 +1.41532e-05 1.42514e-05 1.43504e-05 1.445e-05 1.45503e-05 1.46512e-05 +1.47528e-05 1.48551e-05 1.4958e-05 1.50616e-05 1.51659e-05 1.52709e-05 +1.53766e-05 1.5483e-05 1.55901e-05 1.56979e-05 1.58065e-05 1.59157e-05 +1.60256e-05 1.61363e-05 1.62477e-05 1.63599e-05 1.64727e-05 1.65864e-05 +1.67007e-05 1.68159e-05 1.69317e-05 1.70484e-05 1.71658e-05 1.7284e-05 +1.74029e-05 1.75227e-05 1.76432e-05 1.77645e-05 1.78866e-05 1.80095e-05 +1.81333e-05 1.82578e-05 1.83831e-05 1.85093e-05 1.86363e-05 1.87641e-05 +1.88928e-05 1.90223e-05 1.91526e-05 1.92838e-05 1.94158e-05 1.95488e-05 +1.96826e-05 1.98172e-05 1.99527e-05 2.00892e-05 2.02265e-05 2.03647e-05 +2.05038e-05 2.06438e-05 2.07847e-05 2.09266e-05 2.10693e-05 2.1213e-05 +2.13576e-05 2.15032e-05 2.16497e-05 2.17972e-05 2.19456e-05 2.2095e-05 +2.22453e-05 2.23966e-05 2.2549e-05 2.27022e-05 2.28565e-05 2.30118e-05 +2.31681e-05 2.33254e-05 2.34837e-05 2.36431e-05 2.38035e-05 2.39649e-05 +2.41273e-05 2.42908e-05 2.44554e-05 2.4621e-05 2.47877e-05 2.49554e-05 +2.51243e-05 2.52942e-05 2.54652e-05 2.56374e-05 2.58106e-05 2.5985e-05 +2.61604e-05 2.6337e-05 2.65148e-05 2.66937e-05 2.68737e-05 2.70549e-05 +2.72372e-05 2.74207e-05 2.76054e-05 2.77913e-05 2.79784e-05 2.81667e-05 +2.83561e-05 2.85468e-05 2.87387e-05 2.89319e-05 2.91262e-05 2.93219e-05 +2.95187e-05 2.97168e-05 2.99162e-05 3.01169e-05 3.03189e-05 3.05221e-05 +3.07266e-05 3.09324e-05 3.11396e-05 3.13481e-05 3.15579e-05 3.1769e-05 +3.19815e-05 3.21953e-05 3.24105e-05 3.2627e-05 3.2845e-05 3.30643e-05 +3.3285e-05 3.35071e-05 3.37306e-05 3.39555e-05; +#A 1000 3.41819e-05 3.44097e-05 3.4639e-05 3.48696e-05 3.51018e-05 +3.53354e-05 3.55705e-05 3.58071e-05 3.60452e-05 3.62848e-05 3.65259e-05 +3.67685e-05 3.70127e-05 3.72584e-05 3.75057e-05 3.77545e-05 3.80049e-05 +3.82568e-05 3.85104e-05 3.87655e-05 3.90223e-05 3.92807e-05 3.95407e-05 +3.98023e-05 4.00656e-05 4.03305e-05 4.05971e-05 4.08654e-05 4.11353e-05 +4.1407e-05 4.16804e-05 4.19554e-05 4.22322e-05 4.25107e-05 4.2791e-05 +4.3073e-05 4.33568e-05 4.36424e-05 4.39298e-05 4.42189e-05 4.45099e-05 +4.48027e-05 4.50973e-05 4.53937e-05 4.5692e-05 4.59922e-05 4.62943e-05 +4.65982e-05 4.6904e-05 4.72117e-05 4.75214e-05 4.78329e-05 4.81464e-05 +4.84619e-05 4.87793e-05 4.90987e-05 4.942e-05 4.97434e-05 5.00688e-05 +5.03962e-05 5.07256e-05 5.10571e-05 5.13907e-05 5.17263e-05 5.20639e-05 +5.24037e-05 5.27456e-05 5.30896e-05 5.34357e-05 5.3784e-05 5.41344e-05 +5.4487e-05 5.48417e-05 5.51987e-05 5.55579e-05 5.59192e-05 5.62828e-05 +5.66487e-05 5.70168e-05 5.73872e-05 5.77598e-05 5.81348e-05 5.8512e-05 +5.88916e-05 5.92735e-05 5.96578e-05 6.00444e-05 6.04334e-05 6.08248e-05 +6.12186e-05 6.16148e-05 6.20135e-05 6.24145e-05 6.28181e-05 6.32241e-05 +6.36326e-05 6.40436e-05 6.44572e-05 6.48733e-05 6.52918e-05 6.5713e-05 +6.61367e-05 6.65631e-05 6.6992e-05 6.74235e-05 6.78577e-05 6.82946e-05 +6.87341e-05 6.91763e-05 6.96211e-05 7.00688e-05 7.0519e-05 7.09721e-05 +7.14279e-05 7.18865e-05 7.23479e-05 7.2812e-05 7.32791e-05 7.37489e-05 +7.42216e-05 7.46971e-05 7.51756e-05 7.5657e-05 7.61412e-05 7.66284e-05 +7.71186e-05 7.76117e-05 7.81078e-05 7.86069e-05 7.9109e-05 7.96142e-05 +8.01224e-05 8.06337e-05 8.11481e-05 8.16656e-05 8.21862e-05 8.271e-05 +8.32369e-05 8.3767e-05 8.43002e-05 8.48367e-05 8.53765e-05 8.59195e-05 +8.64657e-05 8.70152e-05 8.75681e-05 8.81243e-05 8.86837e-05 8.92466e-05 +8.98128e-05 9.03825e-05 9.09555e-05 9.1532e-05 9.2112e-05 9.26954e-05 +9.32823e-05 9.38727e-05 9.44667e-05 9.50643e-05 9.56654e-05 9.627e-05 +9.68784e-05 9.74903e-05 9.81059e-05 9.87252e-05 9.93481e-05 9.99749e-05 +0.000100605 0.000101239 0.000101877 0.000102519 0.000103165 0.000103814 +0.000104467 0.000105125 0.000105786 0.000106451 0.00010712 0.000107793 +0.00010847 0.00010915 0.000109835 0.000110525 0.000111218 0.000111915 +0.000112616 0.000113322 0.000114031 0.000114745 0.000115463 0.000116186 +0.000116912 0.000117643 0.000118379 0.000119118 0.000119862 0.00012061 +0.000121363 0.00012212 0.000122882 0.000123648 0.000124419 0.000125194 +0.000125974 0.000126758 0.000127547 0.00012834 0.000129139 0.000129941 +0.000130749 0.000131561 0.000132378 0.0001332 0.000134027 0.000134859 +0.000135695 0.000136536 0.000137383 0.000138234 0.00013909 0.000139951 +0.000140817 0.000141689 0.000142565 0.000143446 0.000144333 0.000145225 +0.000146122 0.000147024 0.000147931 0.000148844 0.000149762 0.000150685 +0.000151614 0.000152548 0.000153488 0.000154433 0.000155383 0.000156339 +0.000157301 0.000158268 0.00015924 0.000160219 0.000161203 0.000162193 +0.000163188 0.000164189 0.000165196 0.000166209 0.000167228 0.000168252 +0.000169283 0.000170319 0.000171361 0.00017241 0.000173464 0.000174525 +0.000175591 0.000176664 0.000177743 0.000178828 0.00017992 0.000181017 +0.000182121 0.000183231 0.000184348 0.000185471 0.000186601 0.000187737 +0.000188879 0.000190028 0.000191184 0.000192346 0.000193515 0.00019469 +0.000195873 0.000197062 0.000198258 0.00019946 0.00020067 0.000201886 +0.00020311 0.00020434 0.000205577 0.000206822 0.000208073 0.000209332 +0.000210597 0.00021187 0.000213151 0.000214438 0.000215733 0.000217035 +0.000218345 0.000219662 0.000220986 0.000222318 0.000223658 0.000225005 +0.000226359 0.000227722 0.000229092 0.00023047 0.000231855 0.000233249 +0.00023465 0.000236059 0.000237476 0.000238902 0.000240335 0.000241776 +0.000243226 0.000244683 0.000246149 0.000247623 0.000249105 0.000250596 +0.000252095 0.000253603 0.000255119 0.000256643 0.000258176 0.000259718 +0.000261268 0.000262827 0.000264395 0.000265971 0.000267556 0.000269151 +0.000270754 0.000272366 0.000273987 0.000275617 0.000277256 0.000278905 +0.000280562 0.000282229 0.000283905 0.00028559 0.000287285 0.000288989 +0.000290703 0.000292427 0.000294159 0.000295902 0.000297654 0.000299416 +0.000301188 0.000302969 0.000304761 0.000306562 0.000308373 0.000310195 +0.000312026 0.000313868 0.00031572 0.000317582 0.000319454 0.000321337 +0.00032323 0.000325133 0.000327047 0.000328972 0.000330907 0.000332853 +0.00033481 0.000336777 0.000338756 0.000340745 0.000342745 0.000344756 +0.000346778 0.000348811 0.000350856 0.000352911 0.000354978 0.000357056 +0.000359146 0.000361247 0.00036336 0.000365484 0.00036762 0.000369767 +0.000371927 0.000374098 0.000376281 0.000378475 0.000380682 0.000382901 +0.000385132 0.000387375 0.000389631 0.000391899 0.000394179 0.000396471 +0.000398776 0.000401093 0.000403424 0.000405766 0.000408122 0.00041049 +0.000412871 0.000415265 0.000417672 0.000420092 0.000422525 0.000424972 +0.000427431 0.000429904 0.000432391 0.00043489 0.000437404 0.000439931 +0.000442471 0.000445025 0.000447593 0.000450175 0.000452771 0.000455381 +0.000458004 0.000460642 0.000463295 0.000465961 0.000468642 0.000471337 +0.000474047 0.000476771 0.00047951 0.000482263 0.000485031 0.000487815 +0.000490613 0.000493426 0.000496254 0.000499097 0.000501956 0.000504829 +0.000507719 0.000510623 0.000513543 0.000516479 0.00051943 0.000522397 +0.00052538 0.000528379 0.000531394 0.000534425 0.000537472 0.000540535 +0.000543614 0.00054671 0.000549822 0.000552951 0.000556097 0.000559259 +0.000562438 0.000565633 0.000568846 0.000572076 0.000575323 0.000578587 +0.000581868 0.000585166 0.000588483 0.000591816 0.000595167 0.000598536 +0.000601923 0.000605327 0.00060875 0.00061219 0.000615649 0.000619126 +0.000622621 0.000626135 0.000629667 0.000633217 0.000636786 0.000640374 +0.000643981 0.000647607 0.000651252 0.000654915 0.000658599 0.000662301 +0.000666023 0.000669764 0.000673525 0.000677305 0.000681105 0.000684925 +0.000688765 0.000692625 0.000696506 0.000700406 0.000704327 0.000708268 +0.00071223 0.000716212 0.000720215 0.000724239 0.000728284 0.000732349 +0.000736436 0.000740544 0.000744674 0.000748825 0.000752997 0.000757191 +0.000761407 0.000765644 0.000769904 0.000774185 0.000778489 0.000782815 +0.000787163 0.000791534 0.000795927 0.000800343 0.000804782 0.000809244 +0.000813728 0.000818236 0.000822767 0.000827321 0.000831899 0.0008365 +0.000841125 0.000845773 0.000850446 0.000855142 0.000859863 0.000864607 +0.000869376 0.00087417 0.000878988 0.00088383 0.000888698 0.00089359 +0.000898508 0.00090345 0.000908418 0.000913411 0.000918429 0.000923473 +0.000928543 0.000933639 0.00093876 0.000943908 0.000949082 0.000954282 +0.000959509 0.000964762 0.000970042 0.000975348 0.000980682 0.000986042 +0.00099143 0.000996845 0.00100229 0.00100776 0.00101326 0.00101878 +0.00102433 0.00102992 0.00103553 0.00104116 0.00104683 0.00105253 0.00105825 +0.001064 0.00106978 0.00107559 0.00108143 0.0010873 0.0010932 0.00109913 +0.00110509 0.00111108 0.0011171 0.00112314 0.00112922 0.00113533 0.00114147 +0.00114764 0.00115384 0.00116008 0.00116634 0.00117263 0.00117896 0.00118532 +0.00119171 0.00119813 0.00120458 0.00121107 0.00121759 0.00122414 0.00123072 +0.00123734 0.00124399 0.00125067 0.00125738 0.00126413 0.00127091 0.00127773 +0.00128458 0.00129146 0.00129838 0.00130533 0.00131232 0.00131934 0.00132639 +0.00133348 0.00134061 0.00134777 0.00135496 0.00136219 0.00136946 0.00137676 +0.0013841 0.00139148 0.00139889 0.00140633 0.00141382 0.00142134 0.0014289 +0.00143649 0.00144412 0.00145179 0.0014595 0.00146725 0.00147503 0.00148285 +0.00149071 0.00149861 0.00150654 0.00151452 0.00152253 0.00153059 0.00153868 +0.00154681 0.00155498 0.00156319 0.00157144 0.00157974 0.00158807 0.00159644 +0.00160485 0.00161331 0.0016218 0.00163034 0.00163892 0.00164753 0.0016562 +0.0016649 0.00167364 0.00168243 0.00169126 0.00170013 0.00170905 0.00171801 +0.00172701 0.00173605 0.00174514 0.00175428 0.00176345 0.00177267 0.00178194 +0.00179125 0.0018006 0.00181 0.00181945 0.00182894 0.00183847 0.00184806 +0.00185768 0.00186736 0.00187708 0.00188684 0.00189666 0.00190652 0.00191642 +0.00192638 0.00193638 0.00194643 0.00195653 0.00196667 0.00197687 0.00198711 +0.0019974 0.00200774 0.00201814 0.00202857 0.00203906 0.0020496 0.00206019 +0.00207083 0.00208152 0.00209226 0.00210305 0.00211389 0.00212479 0.00213573 +0.00214673 0.00215778 0.00216888 0.00218003 0.00219124 0.0022025 0.00221381 +0.00222518 0.0022366 0.00224807 0.0022596 0.00227118 0.00228282 0.00229451 +0.00230625 0.00231805 0.00232991 0.00234182 0.00235379 0.00236581 0.00237789 +0.00239003 0.00240222 0.00241447 0.00242678 0.00243914 0.00245156 0.00246404 +0.00247658 0.00248918 0.00250184 0.00251455 0.00252733 0.00254016 0.00255305 +0.00256601 0.00257902 0.00259209 0.00260523 0.00261842 0.00263168 0.002645 +0.00265838 0.00267182 0.00268532 0.00269889 0.00271252 0.00272621 0.00273997 +0.00275378 0.00276767 0.00278161 0.00279563 0.0028097 0.00282384 0.00283805 +0.00285232 0.00286665 0.00288105 0.00289552 0.00291006 0.00292466 0.00293933 +0.00295406 0.00296887 0.00298374 0.00299868 0.00301368 0.00302876 0.0030439 +0.00305912 0.0030744 0.00308975 0.00310518 0.00312067 0.00313623 0.00315187 +0.00316757 0.00318335 0.0031992 0.00321512 0.00323111 0.00324718 0.00326332 +0.00327953 0.00329582 0.00331218 0.00332861 0.00334512 0.0033617 0.00337836 +0.00339509 0.0034119 0.00342878 0.00344574 0.00346278 0.00347989 0.00349708 +0.00351435 0.00353169 0.00354912 0.00356662 0.0035842 0.00360186 0.0036196 +0.00363742 0.00365531 0.00367329 0.00369135 0.00370949 0.00372771 0.00374601 +0.0037644 0.00378286 0.00380141 0.00382004 0.00383876 0.00385755 0.00387644 +0.0038954 0.00391445 0.00393358 0.0039528 0.00397211 0.0039915 0.00401098 +0.00403054 0.00405019 0.00406993 0.00408975 0.00410966 0.00412966 0.00414975 +0.00416993 0.00419019 0.00421055 0.004231 0.00425153 0.00427216 0.00429287 +0.00431368 0.00433458 0.00435558 0.00437666 0.00439784 0.00441911 0.00444047 +0.00446193 0.00448348 0.00450512 0.00452686 0.0045487 0.00457063 0.00459265 +0.00461478 0.004637 0.00465931 0.00468173 0.00470424 0.00472685 0.00474956 +0.00477236 0.00479527 0.00481828 0.00484138 0.00486459 0.00488789 0.0049113 +0.00493481 0.00495842 0.00498214 0.00500595 0.00502987 0.0050539 0.00507802 +0.00510225 0.00512659 0.00515103 0.00517558 0.00520023 0.00522499 0.00524985 +0.00527482 0.0052999 0.00532509 0.00535038 0.00537579 0.0054013 0.00542692 +0.00545265 0.0054785 0.00550445 0.00553051 0.00555669 0.00558298 0.00560937 +0.00563589 0.00566251 0.00568925 0.0057161 0.00574307 0.00577015 0.00579735 +0.00582467 0.0058521 0.00587964 0.00590731 0.00593509 0.00596298 0.005991 +0.00601914 0.00604739 0.00607577 0.00610426 0.00613287 0.00616161 0.00619047 +0.00621944 0.00624855 0.00627777 0.00630712 0.00633659 0.00636618 0.0063959 +0.00642574 0.00645571 0.00648581 0.00651603 0.00654638 0.00657685 0.00660746 +0.00663819 0.00666905 0.00670004 0.00673116 0.0067624 0.00679378 0.00682529 +0.00685693 0.00688871 0.00692061 0.00695265 0.00698482 0.00701713 0.00704957 +0.00708214 0.00711485 0.0071477 0.00718068 0.0072138 0.00724706 0.00728045 +0.00731398 0.00734765 0.00738146 0.00741541 0.0074495 0.00748373 0.0075181 +0.00755261 0.00758727 0.00762207 0.00765701 0.00769209 0.00772732 0.0077627 +0.00779821 0.00783388 0.00786969 0.00790565 0.00794175 0.007978 0.0080144 +0.00805095 0.00808765 0.0081245 0.0081615 0.00819865 0.00823595 0.0082734 +0.00831101 0.00834877 0.00838668 0.00842475 0.00846297 0.00850134 0.00853988 +0.00857856 0.00861741 0.00865641 0.00869557 0.00873489 0.00877437 0.008814 +0.0088538 0.00889376 0.00893388; +#A 2000 0.00897416 0.0090146 0.00905521 0.00909598 0.00913691 0.00917801 +0.00921927 0.0092607 0.00930229 0.00934405 0.00938598 0.00942808 0.00947034 +0.00951278 0.00955538 0.00959815 0.0096411 0.00968421 0.0097275 0.00977096 +0.00981459 0.0098584 0.00990238 0.00994654 0.00999087 0.0100354 0.0100801 +0.0101249 0.01017 0.0102152 0.0102606 0.0103062 0.0103519 0.0103979 +0.010444 0.0104903 0.0105368 0.0105834 0.0106303 0.0106773 0.0107245 +0.0107719 0.0108195 0.0108673 0.0109153 0.0109634 0.0110118 0.0110603 +0.011109 0.0111579 0.0112071 0.0112563 0.0113058 0.0113555 0.0114054 +0.0114555 0.0115057 0.0115562 0.0116069 0.0116577 0.0117088 0.01176 +0.0118115 0.0118631 0.011915 0.011967 0.0120193 0.0120717 0.0121244 +0.0121773 0.0122303 0.0122836 0.0123371 0.0123908 0.0124446 0.0124987 +0.0125531 0.0126076 0.0126623 0.0127172 0.0127724 0.0128277 0.0128833 +0.0129391 0.0129951 0.0130513 0.0131077 0.0131644 0.0132212 0.0132783 +0.0133356 0.0133931 0.0134508 0.0135088 0.0135669 0.0136253 0.013684 +0.0137428 0.0138018 0.0138611 0.0139206 0.0139804 0.0140403 0.0141005 +0.0141609 0.0142216 0.0142825 0.0143436 0.0144049 0.0144665 0.0145282 +0.0145903 0.0146525 0.014715 0.0147778 0.0148407 0.0149039 0.0149674 +0.0150311 0.015095 0.0151591 0.0152235 0.0152882 0.015353 0.0154182 +0.0154835 0.0155491 0.015615 0.0156811 0.0157474 0.015814 0.0158808 +0.0159479 0.0160153 0.0160828 0.0161507 0.0162188 0.0162871 0.0163557 +0.0164245 0.0164936 0.016563 0.0166326 0.0167025 0.0167726 0.016843 +0.0169136 0.0169845 0.0170557 0.0171271 0.0171988 0.0172707 0.0173429 +0.0174154 0.0174881 0.0175612 0.0176344 0.017708 0.0177818 0.0178559 +0.0179302 0.0180048 0.0180797 0.0181549 0.0182303 0.018306 0.018382 +0.0184583 0.0185348 0.0186117 0.0186888 0.0187661 0.0188438 0.0189217 +0.0189999 0.0190784 0.0191572 0.0192363 0.0193156 0.0193953 0.0194752 +0.0195554 0.0196359 0.0197167 0.0197978 0.0198792 0.0199608 0.0200428 +0.020125 0.0202076 0.0202904 0.0203735 0.020457 0.0205407 0.0206247 +0.020709 0.0207937 0.0208786 0.0209638 0.0210493 0.0211352 0.0212213 +0.0213078 0.0213945 0.0214816 0.0215689 0.0216566 0.0217446 0.0218329 +0.0219215 0.0220104 0.0220996 0.0221892 0.022279 0.0223692 0.0224597 +0.0225505 0.0226416 0.0227331 0.0228249 0.022917 0.0230094 0.0231021 +0.0231952 0.0232885 0.0233823 0.0234763 0.0235707 0.0236654 0.0237604 +0.0238557 0.0239514 0.0240474 0.0241438 0.0242405 0.0243375 0.0244348 +0.0245325 0.0246306 0.0247289 0.0248276 0.0249267 0.0250261 0.0251258 +0.0252259 0.0253263 0.0254271 0.0255282 0.0256296 0.0257314 0.0258336 +0.0259361 0.0260389 0.0261421 0.0262457 0.0263496 0.0264539 0.0265585 +0.0266635 0.0267688 0.0268745 0.0269806 0.027087 0.0271938 0.0273009 +0.0274084 0.0275163 0.0276245 0.0277331 0.0278421 0.0279514 0.0280611 +0.0281712 0.0282816 0.0283924 0.0285036 0.0286152 0.0287271 0.0288395 +0.0289521 0.0290652 0.0291787 0.0292925 0.0294067 0.0295213 0.0296363 +0.0297516 0.0298674 0.0299835 0.0301 0.0302169 0.0303342 0.0304519 +0.03057 0.0306884 0.0308073 0.0309265 0.0310462 0.0311662 0.0312867 +0.0314075 0.0315288 0.0316504 0.0317724 0.0318949 0.0320177 0.032141 +0.0322646 0.0323887 0.0325131 0.032638 0.0327633 0.032889 0.0330151 +0.0331416 0.0332686 0.0333959 0.0335237 0.0336518 0.0337804 0.0339095 +0.0340389 0.0341687 0.034299 0.0344297 0.0345608 0.0346924 0.0348244 +0.0349568 0.0350896 0.0352229 0.0353566 0.0354907 0.0356252 0.0357602 +0.0358956 0.0360315 0.0361678 0.0363045 0.0364417 0.0365793 0.0367173 +0.0368558 0.0369948 0.0371341 0.037274 0.0374142 0.037555 0.0376961 +0.0378377 0.0379798 0.0381223 0.0382653 0.0384087 0.0385526 0.0386969 +0.0388417 0.038987 0.0391327 0.0392789 0.0394255 0.0395726 0.0397201 +0.0398682 0.0400166 0.0401656 0.040315 0.0404649 0.0406153 0.0407661 +0.0409174 0.0410692 0.0412214 0.0413742 0.0415274 0.0416811 0.0418352 +0.0419899 0.042145 0.0423006 0.0424567 0.0426133 0.0427703 0.0429279 +0.0430859 0.0432444 0.0434034 0.0435629 0.0437229 0.0438834 0.0440444 +0.0442059 0.0443679 0.0445303 0.0446933 0.0448568 0.0450208 0.0451852 +0.0453502 0.0455157 0.0456817 0.0458482 0.0460152 0.0461827 0.0463508 +0.0465193 0.0466883 0.0468579 0.047028 0.0471986 0.0473697 0.0475413 +0.0477135 0.0478862 0.0480593 0.0482331 0.0484073 0.0485821 0.0487574 +0.0489332 0.0491095 0.0492864 0.0494638 0.0496418 0.0498202 0.0499992 +0.0501788 0.0503589 0.0505395 0.0507206 0.0509023 0.0510846 0.0512674 +0.0514507 0.0516345 0.051819 0.0520039 0.0521894 0.0523755 0.0525621 +0.0527493 0.052937 0.0531253 0.0533141 0.0535035 0.0536934 0.0538839 +0.054075 0.0542666 0.0544588 0.0546515 0.0548448 0.0550387 0.0552331 +0.0554281 0.0556237 0.0558198 0.0560166 0.0562139 0.0564117 0.0566102 +0.0568092 0.0570088 0.057209 0.0574097 0.057611 0.0578129 0.0580155 +0.0582185 0.0584222 0.0586265 0.0588313 0.0590367 0.0592428 0.0594494 +0.0596566 0.0598644 0.0600728 0.0602817 0.0604913 0.0607015 0.0609123 +0.0611237 0.0613357 0.0615483 0.0617615 0.0619753 0.0621897 0.0624047 +0.0626203 0.0628366 0.0630534 0.0632709 0.063489 0.0637076 0.0639269 +0.0641469 0.0643674 0.0645886 0.0648103 0.0650327 0.0652558 0.0654794 +0.0657037 0.0659286 0.0661541 0.0663803 0.0666071 0.0668345 0.0670626 +0.0672912 0.0675206 0.0677505 0.0679811 0.0682123 0.0684442 0.0686767 +0.0689099 0.0691437 0.0693781 0.0696132 0.069849 0.0700853 0.0703224 +0.0705601 0.0707984 0.0710374 0.071277 0.0715173 0.0717583 0.0719999 +0.0722422 0.0724851 0.0727287 0.0729729 0.0732178 0.0734634 0.0737097 +0.0739566 0.0742042 0.0744524 0.0747013 0.0749509 0.0752012 0.0754521 +0.0757037 0.075956 0.076209 0.0764626 0.0767169 0.0769719 0.0772276 +0.077484 0.077741 0.0779988 0.0782572 0.0785163 0.0787761 0.0790366 +0.0792978 0.0795596 0.0798222 0.0800855 0.0803494 0.0806141 0.0808794 +0.0811455 0.0814123 0.0816797 0.0819479 0.0822167 0.0824863 0.0827566 +0.0830275 0.0832992 0.0835716 0.0838447 0.0841186 0.0843931 0.0846683 +0.0849443 0.085221 0.0854984 0.0857765 0.0860553 0.0863349 0.0866152 +0.0868962 0.0871779 0.0874604 0.0877435 0.0880275 0.0883121 0.0885975 +0.0888836 0.0891704 0.089458 0.0897463 0.0900353 0.0903251 0.0906156 +0.0909069 0.0911988 0.0914916 0.091785 0.0920793 0.0923742 0.0926699 +0.0929664 0.0932636 0.0935616 0.0938603 0.0941597 0.0944599 0.0947609 +0.0950626 0.0953651 0.0956683 0.0959723 0.0962771 0.0965826 0.0968889 +0.0971959 0.0975037 0.0978123 0.0981216 0.0984317 0.0987426 0.0990542 +0.0993666 0.0996798 0.0999937 0.100308 0.100624 0.10094 0.101257 0.101575 +0.101894 0.102213 0.102533 0.102854 0.103176 0.103498 0.103822 0.104146 +0.104471 0.104796 0.105123 0.10545 0.105778 0.106107 0.106437 0.106767 +0.107098 0.10743 0.107763 0.108097 0.108431 0.108766 0.109102 0.109439 +0.109777 0.110115 0.110454 0.110794 0.111135 0.111477 0.111819 0.112163 +0.112507 0.112852 0.113197 0.113544 0.113891 0.114239 0.114588 0.114938 +0.115289 0.11564 0.115993 0.116346 0.1167 0.117054 0.11741 0.117766 +0.118123 0.118482 0.11884 0.1192 0.119561 0.119922 0.120284 0.120647 +0.121011 0.121376 0.121741 0.122108 0.122475 0.122843 0.123212 0.123582 +0.123953 0.124324 0.124696 0.125069 0.125443 0.125818 0.126194 0.12657 +0.126948 0.127326 0.127705 0.128085 0.128466 0.128848 0.12923 0.129614 +0.129998 0.130383 0.130769 0.131156 0.131543 0.131932 0.132321 0.132712 +0.133103 0.133495 0.133888 0.134281 0.134676 0.135071 0.135468 0.135865 +0.136263 0.136662 0.137062 0.137462 0.137864 0.138267 0.13867 0.139074 +0.139479 0.139885 0.140292 0.1407 0.141108 0.141518 0.141928 0.14234 +0.142752 0.143165 0.143579 0.143994 0.144409 0.144826 0.145243 0.145662 +0.146081 0.146501 0.146922 0.147344 0.147767 0.148191 0.148615 0.149041 +0.149467 0.149895 0.150323 0.150752 0.151182 0.151613 0.152045 0.152478 +0.152911 0.153346 0.153781 0.154218 0.154655 0.155093 0.155532 0.155972 +0.156413 0.156855 0.157297 0.157741 0.158186 0.158631 0.159077 0.159525 +0.159973 0.160422 0.160872 0.161323 0.161775 0.162228 0.162681 0.163136 +0.163591 0.164048 0.164505 0.164963 0.165423 0.165883 0.166344 0.166806 +0.167269 0.167733 0.168197 0.168663 0.16913 0.169597 0.170066 0.170535 +0.171005 0.171477 0.171949 0.172422 0.172896 0.173371 0.173847 0.174324 +0.174801 0.17528 0.17576 0.17624 0.176722 0.177204 0.177688 0.178172 +0.178657 0.179143 0.17963 0.180118 0.180607 0.181097 0.181588 0.18208 +0.182573 0.183067 0.183561 0.184057 0.184553 0.185051 0.185549 0.186048 +0.186549 0.18705 0.187552 0.188055 0.188559 0.189064 0.18957 0.190077 +0.190585 0.191094 0.191604 0.192114 0.192626 0.193139 0.193652 0.194167 +0.194682 0.195198 0.195716 0.196234 0.196753 0.197273 0.197795 0.198317 +0.19884 0.199364 0.199889 0.200415 0.200941 0.201469 0.201998 0.202528 +0.203058 0.20359 0.204122 0.204656 0.20519 0.205726 0.206262 0.2068 +0.207338 0.207877 0.208417 0.208959 0.209501 0.210044 0.210588 0.211133 +0.211679 0.212226 0.212773 0.213322 0.213872 0.214423 0.214974 0.215527 +0.216081 0.216635 0.217191 0.217747 0.218305 0.218863 0.219422 0.219983 +0.220544 0.221106 0.221669 0.222233 0.222798 0.223364 0.223931 0.224499 +0.225068 0.225638 0.226209 0.226781 0.227354 0.227927 0.228502 0.229078 +0.229654 0.230232 0.23081 0.23139 0.23197 0.232551 0.233134 0.233717 +0.234301 0.234886 0.235472 0.23606 0.236648 0.237237 0.237827 0.238417 +0.239009 0.239602 0.240196 0.240791 0.241386 0.241983 0.242581 0.243179 +0.243779 0.244379 0.244981 0.245583 0.246186 0.246791 0.247396 0.248002 +0.248609 0.249217 0.249826 0.250436 0.251047 0.251659 0.252272 0.252886 +0.2535 0.254116 0.254733 0.25535 0.255969 0.256588 0.257209 0.25783 +0.258452 0.259076 0.2597 0.260325 0.260951 0.261578 0.262206 0.262835 +0.263465 0.264096 0.264728 0.26536 0.265994 0.266629 0.267264 0.2679 +0.268538 0.269176 0.269816 0.270456 0.271097 0.271739 0.272382 0.273026 +0.273671 0.274317 0.274963; +#A 3000 0.275611 0.27626 0.276909 0.27756 0.278211 0.278864 0.279517 +0.280171 0.280826 0.281482 0.282139 0.282797 0.283456 0.284116 0.284777 +0.285438 0.286101 0.286764 0.287429 0.288094 0.28876 0.289428 0.290096 +0.290765 0.291435 0.292105 0.292777 0.29345 0.294123 0.294798 0.295473 +0.29615 0.296827 0.297505 0.298184 0.298864 0.299545 0.300227 0.300909 +0.301593 0.302277 0.302963 0.303649 0.304336 0.305024 0.305713 0.306403 +0.307094 0.307786 0.308478 0.309172 0.309866 0.310561 0.311258 0.311955 +0.312653 0.313351 0.314051 0.314752 0.315453 0.316156 0.316859 0.317563 +0.318268 0.318974 0.319681 0.320388 0.321097 0.321806 0.322517 0.323228 +0.32394 0.324653 0.325366 0.326081 0.326797 0.327513 0.32823 0.328948 +0.329667 0.330387 0.331108 0.33183 0.332552 0.333275 0.333999 0.334724 +0.33545 0.336177 0.336904 0.337633 0.338362 0.339092 0.339823 0.340555 +0.341288 0.342021 0.342755 0.343491 0.344227 0.344963 0.345701 0.34644 +0.347179 0.347919 0.34866 0.349402 0.350145 0.350888 0.351632 0.352377 +0.353123 0.35387 0.354618 0.355366 0.356115 0.356865 0.357616 0.358368 +0.35912 0.359874 0.360628 0.361383 0.362138 0.362895 0.363652 0.36441 +0.365169 0.365929 0.366689 0.36745 0.368212 0.368975 0.369739 0.370503 +0.371268 0.372034 0.372801 0.373569 0.374337 0.375106 0.375876 0.376647 +0.377418 0.37819 0.378963 0.379737 0.380511 0.381287 0.382063 0.382839 +0.383617 0.384395 0.385174 0.385954 0.386734 0.387516 0.388298 0.38908 +0.389864 0.390648 0.391433 0.392219 0.393005 0.393792 0.39458 0.395369 +0.396158 0.396948 0.397739 0.39853 0.399323 0.400116 0.400909 0.401704 +0.402499 0.403295 0.404091 0.404888 0.405686 0.406485 0.407284 0.408084 +0.408885 0.409686 0.410488 0.411291 0.412094 0.412899 0.413703 0.414509 +0.415315 0.416122 0.416929 0.417738 0.418546 0.419356 0.420166 0.420977 +0.421789 0.422601 0.423414 0.424227 0.425041 0.425856 0.426671 0.427487 +0.428304 0.429121 0.429939 0.430758 0.431577 0.432397 0.433218 0.434039 +0.434861 0.435683 0.436506 0.43733 0.438154 0.438979 0.439804 0.44063 +0.441457 0.442284 0.443112 0.44394 0.444769 0.445599 0.446429 0.44726 +0.448092 0.448923 0.449756 0.450589 0.451423 0.452257 0.453092 0.453928 +0.454764 0.4556 0.456437 0.457275 0.458113 0.458952 0.459791 0.460631 +0.461471 0.462312 0.463154 0.463996 0.464839 0.465682 0.466525 0.467369 +0.468214 0.469059 0.469905 0.470751 0.471598 0.472445 0.473293 0.474141 +0.47499 0.475839 0.476689 0.477539 0.47839 0.479241 0.480093 0.480945 +0.481798 0.482651 0.483504 0.484359 0.485213 0.486068 0.486924 0.48778 +0.488636 0.489493 0.49035 0.491208 0.492066 0.492925 0.493784 0.494643 +0.495503 0.496364 0.497224 0.498086 0.498947 0.499809 0.500672 0.501535 +0.502398 0.503262 0.504126 0.50499 0.505855 0.50672 0.507586 0.508452 +0.509319 0.510186 0.511053 0.51192 0.512788 0.513657 0.514525 0.515394 +0.516264 0.517134 0.518004 0.518874 0.519745 0.520616 0.521488 0.52236 +0.523232 0.524104 0.524977 0.52585 0.526724 0.527598 0.528472 0.529346 +0.530221 0.531096 0.531972 0.532847 0.533723 0.534599 0.535476 0.536353 +0.53723 0.538107 0.538985 0.539863 0.540741 0.54162 0.542498 0.543377 +0.544257 0.545136 0.546016 0.546896 0.547776 0.548657 0.549537 0.550418 +0.5513 0.552181 0.553063 0.553945 0.554827 0.555709 0.556591 0.557474 +0.558357 0.55924 0.560123 0.561007 0.561891 0.562774 0.563658 0.564543 +0.565427 0.566312 0.567196 0.568081 0.568966 0.569852 0.570737 0.571622 +0.572508 0.573394 0.57428 0.575166 0.576052 0.576938 0.577825 0.578711 +0.579598 0.580485 0.581372 0.582259 0.583146 0.584033 0.58492 0.585808 +0.586695 0.587583 0.588471 0.589358 0.590246 0.591134 0.592022 0.59291 +0.593798 0.594686 0.595574 0.596462 0.597351 0.598239 0.599127 0.600016 +0.600904 0.601792 0.602681 0.603569 0.604458 0.605346 0.606235 0.607123 +0.608012 0.6089 0.609789 0.610677 0.611565 0.612454 0.613342 0.614231 +0.615119 0.616007 0.616895 0.617784 0.618672 0.61956 0.620448 0.621336 +0.622224 0.623112 0.623999 0.624887 0.625775 0.626662 0.62755 0.628437 +0.629324 0.630211 0.631098 0.631985 0.632872 0.633759 0.634645 0.635532 +0.636418 0.637304 0.638191 0.639076 0.639962 0.640848 0.641733 0.642619 +0.643504 0.644389 0.645274 0.646158 0.647043 0.647927 0.648811 0.649695 +0.650579 0.651463 0.652346 0.653229 0.654112 0.654995 0.655877 0.65676 +0.657642 0.658524 0.659405 0.660287 0.661168 0.662049 0.662929 0.66381 +0.66469 0.66557 0.666449 0.667329 0.668208 0.669087 0.669965 0.670843 +0.671721 0.672599 0.673476 0.674353 0.67523 0.676106 0.676982 0.677858 +0.678734 0.679609 0.680484 0.681358 0.682232 0.683106 0.683979 0.684853 +0.685725 0.686598 0.68747 0.688341 0.689213 0.690083 0.690954 0.691824 +0.692694 0.693563 0.694432 0.6953 0.696169 0.697036 0.697904 0.69877 +0.699637 0.700503 0.701368 0.702234 0.703098 0.703963 0.704826 0.70569 +0.706553 0.707415 0.708277 0.709138 0.71 0.71086 0.71172 0.71258 0.713439 +0.714297 0.715155 0.716013 0.71687 0.717726 0.718583 0.719438 0.720293 +0.721147 0.722001 0.722855 0.723707 0.72456 0.725411 0.726263 0.727113 +0.727963 0.728813 0.729662 0.73051 0.731358 0.732205 0.733051 0.733897 +0.734743 0.735587 0.736432 0.737275 0.738118 0.73896 0.739802 0.740643 +0.741483 0.742323 0.743162 0.744001 0.744838 0.745676 0.746512 0.747348 +0.748183 0.749018 0.749851 0.750684 0.751517 0.752349 0.75318 0.75401 +0.75484 0.755669 0.756497 0.757324 0.758151 0.758977 0.759803 0.760627 +0.761451 0.762274 0.763097 0.763918 0.764739 0.765559 0.766378 0.767197 +0.768015 0.768832 0.769648 0.770463 0.771278 0.772092 0.772905 0.773717 +0.774529 0.775339 0.776149 0.776958 0.777766 0.778574 0.77938 0.780186 +0.780991 0.781795 0.782598 0.7834 0.784201 0.785002 0.785802 0.7866 +0.787398 0.788195 0.788991 0.789787 0.790581 0.791375 0.792167 0.792959 +0.793749 0.794539 0.795328 0.796116 0.796903 0.797689 0.798475 0.799259 +0.800042 0.800824 0.801606 0.802386 0.803166 0.803944 0.804722 0.805498 +0.806274 0.807048 0.807822 0.808595 0.809366 0.810137 0.810906 0.811675 +0.812442 0.813209 0.813975 0.814739 0.815503 0.816265 0.817026 0.817787 +0.818546 0.819304 0.820061 0.820818 0.821573 0.822327 0.823079 0.823831 +0.824582 0.825332 0.82608 0.826828 0.827574 0.828319 0.829064 0.829807 +0.830549 0.831289 0.832029 0.832768 0.833505 0.834241 0.834977 0.835711 +0.836443 0.837175 0.837906 0.838635 0.839363 0.84009 0.840816 0.841541 +0.842264 0.842987 0.843708 0.844428 0.845147 0.845864 0.84658 0.847296 +0.848009 0.848722 0.849434 0.850144 0.850853 0.851561 0.852267 0.852972 +0.853676 0.854379 0.855081 0.855781 0.85648 0.857178 0.857874 0.858569 +0.859263 0.859956 0.860647 0.861337 0.862026 0.862713 0.8634 0.864084 +0.864768 0.86545 0.866131 0.866811 0.867489 0.868166 0.868841 0.869515 +0.870188 0.87086 0.87153 0.872199 0.872866 0.873532 0.874197 0.87486 +0.875522 0.876183 0.876842 0.8775 0.878157 0.878812 0.879465 0.880117 +0.880768 0.881418 0.882066 0.882712 0.883358 0.884001 0.884644 0.885284 +0.885924 0.886562 0.887199 0.887834 0.888467 0.889099 0.88973 0.89036 +0.890987 0.891614 0.892239 0.892862 0.893484 0.894104 0.894723 0.895341 +0.895957 0.896571 0.897184 0.897796 0.898405 0.899014 0.899621 0.900226 +0.90083 0.901432 0.902033 0.902632 0.90323 0.903826 0.904421 0.905014 +0.905605 0.906195 0.906784 0.907371 0.907956 0.90854 0.909122 0.909702 +0.910281 0.910859 0.911434 0.912009 0.912581 0.913152 0.913722 0.914289 +0.914855 0.91542 0.915983 0.916544 0.917104 0.917662 0.918218 0.918773 +0.919326 0.919878 0.920428 0.920976 0.921523 0.922068 0.922611 0.923152 +0.923692 0.924231 0.924767 0.925302 0.925835 0.926367 0.926897 0.927425 +0.927952 0.928476 0.929 0.929521 0.930041 0.930559 0.931075 0.93159 +0.932103 0.932614 0.933123 0.933631 0.934137 0.934641 0.935144 0.935644 +0.936143 0.936641 0.937136 0.93763 0.938122 0.938612 0.939101 0.939588 +0.940073 0.940556 0.941037 0.941517 0.941995 0.942471 0.942946 0.943418 +0.943889 0.944358 0.944825 0.94529 0.945754 0.946216 0.946676 0.947134 +0.94759 0.948045 0.948498 0.948949 0.949398 0.949845 0.95029 0.950734 +0.951176 0.951616 0.952054 0.95249 0.952924 0.953357 0.953788 0.954217 +0.954644 0.955069 0.955492 0.955913 0.956333 0.956751 0.957166 0.95758 +0.957992 0.958403 0.958811 0.959217 0.959622 0.960025 0.960425 0.960824 +0.961221 0.961616 0.962009 0.962401 0.96279 0.963177 0.963563 0.963947 +0.964328 0.964708 0.965086 0.965462 0.965836 0.966208 0.966578 0.966946 +0.967313 0.967677 0.968039 0.9684 0.968758 0.969115 0.969469 0.969822 +0.970173 0.970522 0.970868 0.971213 0.971556 0.971897 0.972236 0.972573 +0.972908 0.973241 0.973572 0.973901 0.974228 0.974553 0.974876 0.975198 +0.975517 0.975834 0.976149 0.976462 0.976774 0.977083 0.97739 0.977695 +0.977998 0.9783 0.978599 0.978896 0.979191 0.979484 0.979775 0.980064 +0.980352 0.980637 0.98092 0.981201 0.98148 0.981757 0.982032 0.982305 +0.982575 0.982844 0.983111 0.983376 0.983639 0.983899 0.984158 0.984415 +0.984669 0.984922 0.985172 0.985421 0.985667 0.985911 0.986154 0.986394 +0.986632 0.986868 0.987102 0.987334 0.987564 0.987792 0.988017 0.988241 +0.988463 0.988682 0.9889 0.989115 0.989329 0.98954 0.989749 0.989956 +; +#A 4000 0.990161 0.990364 0.990565 0.990764 0.99096 0.991155 0.991347 +0.991538 0.991726 0.991912 0.992096 0.992278 0.992458 0.992636 0.992812 +0.992986 0.993157 0.993326 0.993494 0.993659 0.993822 0.993983 0.994142 +0.994299 0.994454 0.994606 0.994757 0.994905 0.995051 0.995195 0.995337 +0.995477 0.995615 0.995751 0.995884 0.996016 0.996145 0.996272 0.996397 +0.99652 0.996641 0.99676 0.996876 0.996991 0.997103 0.997213 0.997321 +0.997427 0.997531 0.997633 0.997732 0.99783 0.997925 0.998018 0.998109 +0.998198 0.998285 0.998369 0.998452 0.998532 0.99861 0.998687 0.998761 +0.998832 0.998902 0.998969 0.999035 0.999098 0.999159 0.999218 0.999275 +0.99933 0.999382 0.999433 0.999481 0.999527 0.999571 0.999613 0.999652 +0.99969 0.999725 0.999759 0.99979 0.999819 0.999846 0.99987 0.999893 +0.999913 0.999931 0.999947 0.999961 0.999973 0.999983 0.99999 0.999996 +0.999999 1 0.999999 0.999996 0.99999 0.999983 0.999973 0.999961 0.999947 +0.999931 0.999913 0.999893 0.99987 0.999846 0.999819 0.99979 0.999759 +0.999725 0.99969 0.999652 0.999613 0.999571 0.999527 0.999481 0.999433 +0.999382 0.99933 0.999275 0.999218 0.999159 0.999098 0.999035 0.998969 +0.998902 0.998832 0.998761 0.998687 0.99861 0.998532 0.998452 0.998369 +0.998285 0.998198 0.998109 0.998018 0.997925 0.99783 0.997732 0.997633 +0.997531 0.997427 0.997321 0.997213 0.997103 0.996991 0.996876 0.99676 +0.996641 0.99652 0.996397 0.996272 0.996145 0.996016 0.995884 0.995751 +0.995615 0.995477 0.995337 0.995195 0.995051 0.994905 0.994757 0.994606 +0.994454 0.994299 0.994142 0.993983 0.993822 0.993659 0.993494 0.993326 +0.993157 0.992986 0.992812 0.992636 0.992458 0.992278 0.992096 0.991912 +0.991726 0.991538 0.991347 0.991155 0.99096 0.990764 0.990565 0.990364 +0.990161 0.989956 0.989749 0.98954 0.989329 0.989115 0.9889 0.988682 +0.988463 0.988241 0.988017 0.987792 0.987564 0.987334 0.987102 0.986868 +0.986632 0.986394 0.986154 0.985911 0.985667 0.985421 0.985172 0.984922 +0.984669 0.984415 0.984158 0.983899 0.983639 0.983376 0.983111 0.982844 +0.982575 0.982305 0.982032 0.981757 0.98148 0.981201 0.98092 0.980637 +0.980352 0.980064 0.979775 0.979484 0.979191 0.978896 0.978599 0.9783 +0.977998 0.977695 0.97739 0.977083 0.976774 0.976462 0.976149 0.975834 +0.975517 0.975198 0.974876 0.974553 0.974228 0.973901 0.973572 0.973241 +0.972908 0.972573 0.972236 0.971897 0.971556 0.971213 0.970868 0.970522 +0.970173 0.969822 0.969469 0.969115 0.968758 0.9684 0.968039 0.967677 +0.967313 0.966946 0.966578 0.966208 0.965836 0.965462 0.965086 0.964708 +0.964328 0.963947 0.963563 0.963177 0.96279 0.962401 0.962009 0.961616 +0.961221 0.960824 0.960425 0.960025 0.959622 0.959217 0.958811 0.958403 +0.957992 0.95758 0.957166 0.956751 0.956333 0.955913 0.955492 0.955069 +0.954644 0.954217 0.953788 0.953357 0.952924 0.95249 0.952054 0.951616 +0.951176 0.950734 0.95029 0.949845 0.949398 0.948949 0.948498 0.948045 +0.94759 0.947134 0.946676 0.946216 0.945754 0.94529 0.944825 0.944358 +0.943889 0.943418 0.942946 0.942471 0.941995 0.941517 0.941037 0.940556 +0.940073 0.939588 0.939101 0.938612 0.938122 0.93763 0.937136 0.936641 +0.936143 0.935644 0.935144 0.934641 0.934137 0.933631 0.933123 0.932614 +0.932103 0.93159 0.931075 0.930559 0.930041 0.929521 0.929 0.928476 +0.927952 0.927425 0.926897 0.926367 0.925835 0.925302 0.924767 0.924231 +0.923692 0.923152 0.922611 0.922068 0.921523 0.920976 0.920428 0.919878 +0.919326 0.918773 0.918218 0.917662 0.917104 0.916544 0.915983 0.91542 +0.914855 0.914289 0.913722 0.913152 0.912581 0.912009 0.911434 0.910859 +0.910281 0.909702 0.909122 0.90854 0.907956 0.907371 0.906784 0.906195 +0.905605 0.905014 0.904421 0.903826 0.90323 0.902632 0.902033 0.901432 +0.90083 0.900226 0.899621 0.899014 0.898405 0.897796 0.897184 0.896571 +0.895957 0.895341 0.894723 0.894104 0.893484 0.892862 0.892239 0.891614 +0.890987 0.89036 0.88973 0.889099 0.888467 0.887834 0.887199 0.886562 +0.885924 0.885284 0.884644 0.884001 0.883358 0.882712 0.882066 0.881418 +0.880768 0.880117 0.879465 0.878812 0.878157 0.8775 0.876842 0.876183 +0.875522 0.87486 0.874197 0.873532 0.872866 0.872199 0.87153 0.87086 +0.870188 0.869515 0.868841 0.868166 0.867489 0.866811 0.866131 0.86545 +0.864768 0.864084 0.8634 0.862713 0.862026 0.861337 0.860647 0.859956 +0.859263 0.858569 0.857874 0.857178 0.85648 0.855781 0.855081 0.854379 +0.853676 0.852972 0.852267 0.851561 0.850853 0.850144 0.849434 0.848722 +0.848009 0.847296 0.84658 0.845864 0.845147 0.844428 0.843708 0.842987 +0.842264 0.841541 0.840816 0.84009 0.839363 0.838635 0.837906 0.837175 +0.836443 0.835711 0.834977 0.834241 0.833505 0.832768 0.832029 0.831289 +0.830549 0.829807 0.829064 0.828319 0.827574 0.826828 0.82608 0.825332 +0.824582 0.823831 0.823079 0.822327 0.821573 0.820818 0.820061 0.819304 +0.818546 0.817787 0.817026 0.816265 0.815503 0.814739 0.813975 0.813209 +0.812442 0.811675 0.810906 0.810137 0.809366 0.808595 0.807822 0.807048 +0.806274 0.805498 0.804722 0.803944 0.803166 0.802386 0.801606 0.800824 +0.800042 0.799259 0.798475 0.797689 0.796903 0.796116 0.795328 0.794539 +0.793749 0.792959 0.792167 0.791375 0.790581 0.789787 0.788991 0.788195 +0.787398 0.7866 0.785802 0.785002 0.784201 0.7834 0.782598 0.781795 +0.780991 0.780186 0.77938 0.778574 0.777766 0.776958 0.776149 0.775339 +0.774529 0.773717 0.772905 0.772092 0.771278 0.770463 0.769648 0.768832 +0.768015 0.767197 0.766378 0.765559 0.764739 0.763918 0.763097 0.762274 +0.761451 0.760627 0.759803 0.758977 0.758151 0.757324 0.756497 0.755669 +0.75484 0.75401 0.75318 0.752349 0.751517 0.750684 0.749851 0.749018 +0.748183 0.747348 0.746512 0.745676 0.744838 0.744001 0.743162 0.742323 +0.741483 0.740643 0.739802 0.73896 0.738118 0.737275 0.736432 0.735587 +0.734743 0.733897 0.733051 0.732205 0.731358 0.73051 0.729662 0.728813 +0.727963 0.727113 0.726263 0.725411 0.72456 0.723707 0.722855 0.722001 +0.721147 0.720293 0.719438 0.718583 0.717726 0.71687 0.716013 0.715155 +0.714297 0.713439 0.71258 0.71172 0.71086 0.71 0.709138 0.708277 0.707415 +0.706553 0.70569 0.704826 0.703963 0.703098 0.702234 0.701368 0.700503 +0.699637 0.69877 0.697904 0.697036 0.696169 0.6953 0.694432 0.693563 +0.692694 0.691824 0.690954 0.690083 0.689213 0.688341 0.68747 0.686598 +0.685725 0.684853 0.683979 0.683106 0.682232 0.681358 0.680484 0.679609 +0.678734 0.677858 0.676982 0.676106 0.67523 0.674353 0.673476 0.672599 +0.671721 0.670843 0.669965 0.669087 0.668208 0.667329 0.666449 0.66557 +0.66469 0.66381 0.662929 0.662049 0.661168 0.660287 0.659405 0.658524 +0.657642 0.65676 0.655877 0.654995 0.654112 0.653229 0.652346 0.651463 +0.650579 0.649695 0.648811 0.647927 0.647043 0.646158 0.645274 0.644389 +0.643504 0.642619 0.641733 0.640848 0.639962 0.639076 0.638191 0.637304 +0.636418 0.635532 0.634645 0.633759 0.632872 0.631985 0.631098 0.630211 +0.629324 0.628437 0.62755 0.626662 0.625775 0.624887 0.623999 0.623112 +0.622224 0.621336 0.620448 0.61956 0.618672 0.617784 0.616895 0.616007 +0.615119 0.614231 0.613342 0.612454 0.611565 0.610677 0.609789 0.6089 +0.608012 0.607123 0.606235 0.605346 0.604458 0.603569 0.602681 0.601792 +0.600904 0.600016 0.599127 0.598239 0.597351 0.596462 0.595574 0.594686 +0.593798 0.59291 0.592022 0.591134 0.590246 0.589358 0.588471 0.587583 +0.586695 0.585808 0.58492 0.584033 0.583146 0.582259 0.581372 0.580485 +0.579598 0.578711 0.577825 0.576938 0.576052 0.575166 0.57428 0.573394 +0.572508 0.571622 0.570737 0.569852 0.568966 0.568081 0.567196 0.566312 +0.565427 0.564543 0.563658 0.562774 0.561891 0.561007 0.560123 0.55924 +0.558357 0.557474 0.556591 0.555709 0.554827 0.553945 0.553063 0.552181 +0.5513 0.550418 0.549537 0.548657 0.547776 0.546896 0.546016 0.545136 +0.544257 0.543377 0.542498 0.54162 0.540741 0.539863 0.538985 0.538107 +0.53723 0.536353 0.535476 0.534599 0.533723 0.532847 0.531972 0.531096 +0.530221 0.529346 0.528472 0.527598 0.526724 0.52585 0.524977 0.524104 +0.523232 0.52236 0.521488 0.520616 0.519745 0.518874 0.518004 0.517134 +0.516264 0.515394 0.514525 0.513657 0.512788 0.51192 0.511053 0.510186 +0.509319 0.508452 0.507586 0.50672 0.505855 0.50499 0.504126 0.503262 +0.502398 0.501535 0.500672 0.499809 0.498947 0.498086 0.497224 0.496364 +0.495503 0.494643 0.493784 0.492925 0.492066 0.491208 0.49035 0.489493 +0.488636 0.48778 0.486924 0.486068 0.485213 0.484359 0.483504 0.482651 +0.481798 0.480945 0.480093 0.479241 0.47839 0.477539 0.476689 0.475839 +0.47499 0.474141 0.473293 0.472445 0.471598 0.470751 0.469905 0.469059 +0.468214 0.467369 0.466525 0.465682 0.464839 0.463996 0.463154 0.462312 +0.461471 0.460631 0.459791 0.458952 0.458113 0.457275 0.456437 0.4556 +0.454764 0.453928 0.453092 0.452257 0.451423 0.450589 0.449756 0.448923 +0.448092 0.44726 0.446429 0.445599 0.444769 0.44394 0.443112 0.442284 +0.441457 0.44063 0.439804 0.438979 0.438154 0.43733 0.436506 0.435683 +0.434861 0.434039 0.433218 0.432397 0.431577 0.430758 0.429939 0.429121 +0.428304 0.427487 0.426671 0.425856 0.425041 0.424227 0.423414 0.422601 +0.421789 0.420977 0.420166 0.419356 0.418546 0.417738 0.416929; +#A 5000 0.416122 0.415315 0.414509 0.413703 0.412899 0.412094 0.411291 +0.410488 0.409686 0.408885 0.408084 0.407284 0.406485 0.405686 0.404888 +0.404091 0.403295 0.402499 0.401704 0.400909 0.400116 0.399323 0.39853 +0.397739 0.396948 0.396158 0.395369 0.39458 0.393792 0.393005 0.392219 +0.391433 0.390648 0.389864 0.38908 0.388298 0.387516 0.386734 0.385954 +0.385174 0.384395 0.383617 0.382839 0.382063 0.381287 0.380511 0.379737 +0.378963 0.37819 0.377418 0.376647 0.375876 0.375106 0.374337 0.373569 +0.372801 0.372034 0.371268 0.370503 0.369739 0.368975 0.368212 0.36745 +0.366689 0.365929 0.365169 0.36441 0.363652 0.362895 0.362138 0.361383 +0.360628 0.359874 0.35912 0.358368 0.357616 0.356865 0.356115 0.355366 +0.354618 0.35387 0.353123 0.352377 0.351632 0.350888 0.350145 0.349402 +0.34866 0.347919 0.347179 0.34644 0.345701 0.344963 0.344227 0.343491 +0.342755 0.342021 0.341288 0.340555 0.339823 0.339092 0.338362 0.337633 +0.336904 0.336177 0.33545 0.334724 0.333999 0.333275 0.332552 0.33183 +0.331108 0.330387 0.329667 0.328948 0.32823 0.327513 0.326797 0.326081 +0.325366 0.324653 0.32394 0.323228 0.322517 0.321806 0.321097 0.320388 +0.319681 0.318974 0.318268 0.317563 0.316859 0.316156 0.315453 0.314752 +0.314051 0.313351 0.312653 0.311955 0.311258 0.310561 0.309866 0.309172 +0.308478 0.307786 0.307094 0.306403 0.305713 0.305024 0.304336 0.303649 +0.302963 0.302277 0.301593 0.300909 0.300227 0.299545 0.298864 0.298184 +0.297505 0.296827 0.29615 0.295473 0.294798 0.294123 0.29345 0.292777 +0.292105 0.291435 0.290765 0.290096 0.289428 0.28876 0.288094 0.287429 +0.286764 0.286101 0.285438 0.284777 0.284116 0.283456 0.282797 0.282139 +0.281482 0.280826 0.280171 0.279517 0.278864 0.278211 0.27756 0.276909 +0.27626 0.275611 0.274963 0.274317 0.273671 0.273026 0.272382 0.271739 +0.271097 0.270456 0.269816 0.269176 0.268538 0.2679 0.267264 0.266629 +0.265994 0.26536 0.264728 0.264096 0.263465 0.262835 0.262206 0.261578 +0.260951 0.260325 0.2597 0.259076 0.258452 0.25783 0.257209 0.256588 +0.255969 0.25535 0.254733 0.254116 0.2535 0.252886 0.252272 0.251659 +0.251047 0.250436 0.249826 0.249217 0.248609 0.248002 0.247396 0.246791 +0.246186 0.245583 0.244981 0.244379 0.243779 0.243179 0.242581 0.241983 +0.241386 0.240791 0.240196 0.239602 0.239009 0.238417 0.237827 0.237237 +0.236648 0.23606 0.235472 0.234886 0.234301 0.233717 0.233134 0.232551 +0.23197 0.23139 0.23081 0.230232 0.229654 0.229078 0.228502 0.227927 +0.227354 0.226781 0.226209 0.225638 0.225068 0.224499 0.223931 0.223364 +0.222798 0.222233 0.221669 0.221106 0.220544 0.219983 0.219422 0.218863 +0.218305 0.217747 0.217191 0.216635 0.216081 0.215527 0.214974 0.214423 +0.213872 0.213322 0.212773 0.212226 0.211679 0.211133 0.210588 0.210044 +0.209501 0.208959 0.208417 0.207877 0.207338 0.2068 0.206262 0.205726 +0.20519 0.204656 0.204122 0.20359 0.203058 0.202528 0.201998 0.201469 +0.200941 0.200415 0.199889 0.199364 0.19884 0.198317 0.197795 0.197273 +0.196753 0.196234 0.195716 0.195198 0.194682 0.194167 0.193652 0.193139 +0.192626 0.192114 0.191604 0.191094 0.190585 0.190077 0.18957 0.189064 +0.188559 0.188055 0.187552 0.18705 0.186549 0.186048 0.185549 0.185051 +0.184553 0.184057 0.183561 0.183067 0.182573 0.18208 0.181588 0.181097 +0.180607 0.180118 0.17963 0.179143 0.178657 0.178172 0.177688 0.177204 +0.176722 0.17624 0.17576 0.17528 0.174801 0.174324 0.173847 0.173371 +0.172896 0.172422 0.171949 0.171477 0.171005 0.170535 0.170066 0.169597 +0.16913 0.168663 0.168197 0.167733 0.167269 0.166806 0.166344 0.165883 +0.165423 0.164963 0.164505 0.164048 0.163591 0.163136 0.162681 0.162228 +0.161775 0.161323 0.160872 0.160422 0.159973 0.159525 0.159077 0.158631 +0.158186 0.157741 0.157297 0.156855 0.156413 0.155972 0.155532 0.155093 +0.154655 0.154218 0.153781 0.153346 0.152911 0.152478 0.152045 0.151613 +0.151182 0.150752 0.150323 0.149895 0.149467 0.149041 0.148615 0.148191 +0.147767 0.147344 0.146922 0.146501 0.146081 0.145662 0.145243 0.144826 +0.144409 0.143994 0.143579 0.143165 0.142752 0.14234 0.141928 0.141518 +0.141108 0.1407 0.140292 0.139885 0.139479 0.139074 0.13867 0.138267 +0.137864 0.137462 0.137062 0.136662 0.136263 0.135865 0.135468 0.135071 +0.134676 0.134281 0.133888 0.133495 0.133103 0.132712 0.132321 0.131932 +0.131543 0.131156 0.130769 0.130383 0.129998 0.129614 0.12923 0.128848 +0.128466 0.128085 0.127705 0.127326 0.126948 0.12657 0.126194 0.125818 +0.125443 0.125069 0.124696 0.124324 0.123953 0.123582 0.123212 0.122843 +0.122475 0.122108 0.121741 0.121376 0.121011 0.120647 0.120284 0.119922 +0.119561 0.1192 0.11884 0.118482 0.118123 0.117766 0.11741 0.117054 +0.1167 0.116346 0.115993 0.11564 0.115289 0.114938 0.114588 0.114239 +0.113891 0.113544 0.113197 0.112852 0.112507 0.112163 0.111819 0.111477 +0.111135 0.110794 0.110454 0.110115 0.109777 0.109439 0.109102 0.108766 +0.108431 0.108097 0.107763 0.10743 0.107098 0.106767 0.106437 0.106107 +0.105778 0.10545 0.105123 0.104796 0.104471 0.104146 0.103822 0.103498 +0.103176 0.102854 0.102533 0.102213 0.101894 0.101575 0.101257 0.10094 +0.100624 0.100308 0.0999937 0.0996798 0.0993666 0.0990542 0.0987426 +0.0984317 0.0981216 0.0978123 0.0975037 0.0971959 0.0968889 0.0965826 +0.0962771 0.0959723 0.0956683 0.0953651 0.0950626 0.0947609 0.0944599 +0.0941597 0.0938603 0.0935616 0.0932636 0.0929664 0.0926699 0.0923742 +0.0920793 0.091785 0.0914916 0.0911988 0.0909069 0.0906156 0.0903251 +0.0900353 0.0897463 0.089458 0.0891704 0.0888836 0.0885975 0.0883121 +0.0880275 0.0877435 0.0874604 0.0871779 0.0868962 0.0866152 0.0863349 +0.0860553 0.0857765 0.0854984 0.085221 0.0849443 0.0846683 0.0843931 +0.0841186 0.0838447 0.0835716 0.0832992 0.0830275 0.0827566 0.0824863 +0.0822167 0.0819479 0.0816797 0.0814123 0.0811455 0.0808794 0.0806141 +0.0803494 0.0800855 0.0798222 0.0795596 0.0792978 0.0790366 0.0787761 +0.0785163 0.0782572 0.0779988 0.077741 0.077484 0.0772276 0.0769719 +0.0767169 0.0764626 0.076209 0.075956 0.0757037 0.0754521 0.0752012 +0.0749509 0.0747013 0.0744524 0.0742042 0.0739566 0.0737097 0.0734634 +0.0732178 0.0729729 0.0727287 0.0724851 0.0722422 0.0719999 0.0717583 +0.0715173 0.071277 0.0710374 0.0707984 0.0705601 0.0703224 0.0700853 +0.069849 0.0696132 0.0693781 0.0691437 0.0689099 0.0686767 0.0684442 +0.0682123 0.0679811 0.0677505 0.0675206 0.0672912 0.0670626 0.0668345 +0.0666071 0.0663803 0.0661541 0.0659286 0.0657037 0.0654794 0.0652558 +0.0650327 0.0648103 0.0645886 0.0643674 0.0641469 0.0639269 0.0637076 +0.063489 0.0632709 0.0630534 0.0628366 0.0626203 0.0624047 0.0621897 +0.0619753 0.0617615 0.0615483 0.0613357 0.0611237 0.0609123 0.0607015 +0.0604913 0.0602817 0.0600728 0.0598644 0.0596566 0.0594494 0.0592428 +0.0590367 0.0588313 0.0586265 0.0584222 0.0582185 0.0580155 0.0578129 +0.057611 0.0574097 0.057209 0.0570088 0.0568092 0.0566102 0.0564117 +0.0562139 0.0560166 0.0558198 0.0556237 0.0554281 0.0552331 0.0550387 +0.0548448 0.0546515 0.0544588 0.0542666 0.054075 0.0538839 0.0536934 +0.0535035 0.0533141 0.0531253 0.052937 0.0527493 0.0525621 0.0523755 +0.0521894 0.0520039 0.051819 0.0516345 0.0514507 0.0512674 0.0510846 +0.0509023 0.0507206 0.0505395 0.0503589 0.0501788 0.0499992 0.0498202 +0.0496418 0.0494638 0.0492864 0.0491095 0.0489332 0.0487574 0.0485821 +0.0484073 0.0482331 0.0480593 0.0478862 0.0477135 0.0475413 0.0473697 +0.0471986 0.047028 0.0468579 0.0466883 0.0465193 0.0463508 0.0461827 +0.0460152 0.0458482 0.0456817 0.0455157 0.0453502 0.0451852 0.0450208 +0.0448568 0.0446933 0.0445303 0.0443679 0.0442059 0.0440444 0.0438834 +0.0437229 0.0435629 0.0434034 0.0432444 0.0430859 0.0429279 0.0427703 +0.0426133 0.0424567 0.0423006 0.042145 0.0419899 0.0418352 0.0416811 +0.0415274 0.0413742 0.0412214 0.0410692 0.0409174 0.0407661 0.0406153 +0.0404649 0.040315 0.0401656 0.0400166 0.0398682 0.0397201 0.0395726 +0.0394255 0.0392789 0.0391327 0.038987 0.0388417 0.0386969 0.0385526 +0.0384087 0.0382653 0.0381223 0.0379798 0.0378377 0.0376961 0.037555 +0.0374142 0.037274 0.0371341 0.0369948 0.0368558 0.0367173 0.0365793 +0.0364417 0.0363045 0.0361678 0.0360315 0.0358956 0.0357602 0.0356252 +0.0354907 0.0353566 0.0352229 0.0350896 0.0349568 0.0348244 0.0346924 +0.0345608 0.0344297 0.034299 0.0341687 0.0340389 0.0339095 0.0337804 +0.0336518 0.0335237 0.0333959 0.0332686 0.0331416 0.0330151 0.032889 +0.0327633 0.032638 0.0325131 0.0323887 0.0322646 0.032141 0.0320177 +0.0318949 0.0317724 0.0316504 0.0315288 0.0314075 0.0312867 0.0311662 +0.0310462 0.0309265 0.0308073 0.0306884 0.03057 0.0304519 0.0303342 +0.0302169 0.0301 0.0299835 0.0298674 0.0297516 0.0296363 0.0295213 +0.0294067 0.0292925 0.0291787 0.0290652 0.0289521 0.0288395 0.0287271 +0.0286152 0.0285036 0.0283924 0.0282816 0.0281712 0.0280611 0.0279514 +0.0278421 0.0277331 0.0276245 0.0275163 0.0274084 0.0273009 0.0271938 +0.027087 0.0269806 0.0268745 0.0267688 0.0266635 0.0265585 0.0264539 +0.0263496 0.0262457 0.0261421 0.0260389 0.0259361 0.0258336 0.0257314 +0.0256296 0.0255282 0.0254271 0.0253263 0.0252259 0.0251258 0.0250261 +0.0249267 0.0248276 0.0247289 0.0246306 0.0245325 0.0244348 0.0243375 +0.0242405 0.0241438 0.0240474 0.0239514 0.0238557 0.0237604 0.0236654 +0.0235707 0.0234763 0.0233823 0.0232885 0.0231952 0.0231021 0.0230094 +0.022917 0.0228249 0.0227331 0.0226416 0.0225505 0.0224597 0.0223692 +0.022279 0.0221892 0.0220996 0.0220104 0.0219215 0.0218329 0.0217446 +0.0216566 0.0215689 0.0214816 0.0213945 0.0213078 0.0212213 0.0211352 +0.0210493 0.0209638 0.0208786 0.0207937 0.020709 0.0206247 0.0205407 +; +#A 6000 0.020457 0.0203735 0.0202904 0.0202076 0.020125 0.0200428 0.0199608 +0.0198792 0.0197978 0.0197167 0.0196359 0.0195554 0.0194752 0.0193953 +0.0193156 0.0192363 0.0191572 0.0190784 0.0189999 0.0189217 0.0188438 +0.0187661 0.0186888 0.0186117 0.0185348 0.0184583 0.018382 0.018306 +0.0182303 0.0181549 0.0180797 0.0180048 0.0179302 0.0178559 0.0177818 +0.017708 0.0176344 0.0175612 0.0174881 0.0174154 0.0173429 0.0172707 +0.0171988 0.0171271 0.0170557 0.0169845 0.0169136 0.016843 0.0167726 +0.0167025 0.0166326 0.016563 0.0164936 0.0164245 0.0163557 0.0162871 +0.0162188 0.0161507 0.0160828 0.0160153 0.0159479 0.0158808 0.015814 +0.0157474 0.0156811 0.015615 0.0155491 0.0154835 0.0154182 0.015353 +0.0152882 0.0152235 0.0151591 0.015095 0.0150311 0.0149674 0.0149039 +0.0148407 0.0147778 0.014715 0.0146525 0.0145903 0.0145282 0.0144665 +0.0144049 0.0143436 0.0142825 0.0142216 0.0141609 0.0141005 0.0140403 +0.0139804 0.0139206 0.0138611 0.0138018 0.0137428 0.013684 0.0136253 +0.0135669 0.0135088 0.0134508 0.0133931 0.0133356 0.0132783 0.0132212 +0.0131644 0.0131077 0.0130513 0.0129951 0.0129391 0.0128833 0.0128277 +0.0127724 0.0127172 0.0126623 0.0126076 0.0125531 0.0124987 0.0124446 +0.0123908 0.0123371 0.0122836 0.0122303 0.0121773 0.0121244 0.0120717 +0.0120193 0.011967 0.011915 0.0118631 0.0118115 0.01176 0.0117088 0.0116577 +0.0116069 0.0115562 0.0115057 0.0114555 0.0114054 0.0113555 0.0113058 +0.0112563 0.0112071 0.0111579 0.011109 0.0110603 0.0110118 0.0109634 +0.0109153 0.0108673 0.0108195 0.0107719 0.0107245 0.0106773 0.0106303 +0.0105834 0.0105368 0.0104903 0.010444 0.0103979 0.0103519 0.0103062 +0.0102606 0.0102152 0.01017 0.0101249 0.0100801 0.0100354 0.00999087 +0.00994654 0.00990238 0.0098584 0.00981459 0.00977096 0.0097275 0.00968421 +0.0096411 0.00959815 0.00955538 0.00951278 0.00947034 0.00942808 0.00938598 +0.00934405 0.00930229 0.0092607 0.00921927 0.00917801 0.00913691 0.00909598 +0.00905521 0.0090146 0.00897416 0.00893388 0.00889376 0.0088538 0.008814 +0.00877437 0.00873489 0.00869557 0.00865641 0.00861741 0.00857856 0.00853988 +0.00850134 0.00846297 0.00842475 0.00838668 0.00834877 0.00831101 0.0082734 +0.00823595 0.00819865 0.0081615 0.0081245 0.00808765 0.00805095 0.0080144 +0.007978 0.00794175 0.00790565 0.00786969 0.00783388 0.00779821 0.0077627 +0.00772732 0.00769209 0.00765701 0.00762207 0.00758727 0.00755261 0.0075181 +0.00748373 0.0074495 0.00741541 0.00738146 0.00734765 0.00731398 0.00728045 +0.00724706 0.0072138 0.00718068 0.0071477 0.00711485 0.00708214 0.00704957 +0.00701713 0.00698482 0.00695265 0.00692061 0.00688871 0.00685693 0.00682529 +0.00679378 0.0067624 0.00673116 0.00670004 0.00666905 0.00663819 0.00660746 +0.00657685 0.00654638 0.00651603 0.00648581 0.00645571 0.00642574 0.0063959 +0.00636618 0.00633659 0.00630712 0.00627777 0.00624855 0.00621944 0.00619047 +0.00616161 0.00613287 0.00610426 0.00607577 0.00604739 0.00601914 0.005991 +0.00596298 0.00593509 0.00590731 0.00587964 0.0058521 0.00582467 0.00579735 +0.00577015 0.00574307 0.0057161 0.00568925 0.00566251 0.00563589 0.00560937 +0.00558298 0.00555669 0.00553051 0.00550445 0.0054785 0.00545265 0.00542692 +0.0054013 0.00537579 0.00535038 0.00532509 0.0052999 0.00527482 0.00524985 +0.00522499 0.00520023 0.00517558 0.00515103 0.00512659 0.00510225 0.00507802 +0.0050539 0.00502987 0.00500595 0.00498214 0.00495842 0.00493481 0.0049113 +0.00488789 0.00486459 0.00484138 0.00481828 0.00479527 0.00477236 0.00474956 +0.00472685 0.00470424 0.00468173 0.00465931 0.004637 0.00461478 0.00459265 +0.00457063 0.0045487 0.00452686 0.00450512 0.00448348 0.00446193 0.00444047 +0.00441911 0.00439784 0.00437666 0.00435558 0.00433458 0.00431368 0.00429287 +0.00427216 0.00425153 0.004231 0.00421055 0.00419019 0.00416993 0.00414975 +0.00412966 0.00410966 0.00408975 0.00406993 0.00405019 0.00403054 0.00401098 +0.0039915 0.00397211 0.0039528 0.00393358 0.00391445 0.0038954 0.00387644 +0.00385755 0.00383876 0.00382004 0.00380141 0.00378286 0.0037644 0.00374601 +0.00372771 0.00370949 0.00369135 0.00367329 0.00365531 0.00363742 0.0036196 +0.00360186 0.0035842 0.00356662 0.00354912 0.00353169 0.00351435 0.00349708 +0.00347989 0.00346278 0.00344574 0.00342878 0.0034119 0.00339509 0.00337836 +0.0033617 0.00334512 0.00332861 0.00331218 0.00329582 0.00327953 0.00326332 +0.00324718 0.00323111 0.00321512 0.0031992 0.00318335 0.00316757 0.00315187 +0.00313623 0.00312067 0.00310518 0.00308975 0.0030744 0.00305912 0.0030439 +0.00302876 0.00301368 0.00299868 0.00298374 0.00296887 0.00295406 0.00293933 +0.00292466 0.00291006 0.00289552 0.00288105 0.00286665 0.00285232 0.00283805 +0.00282384 0.0028097 0.00279563 0.00278161 0.00276767 0.00275378 0.00273997 +0.00272621 0.00271252 0.00269889 0.00268532 0.00267182 0.00265838 0.002645 +0.00263168 0.00261842 0.00260523 0.00259209 0.00257902 0.00256601 0.00255305 +0.00254016 0.00252733 0.00251455 0.00250184 0.00248918 0.00247658 0.00246404 +0.00245156 0.00243914 0.00242678 0.00241447 0.00240222 0.00239003 0.00237789 +0.00236581 0.00235379 0.00234182 0.00232991 0.00231805 0.00230625 0.00229451 +0.00228282 0.00227118 0.0022596 0.00224807 0.0022366 0.00222518 0.00221381 +0.0022025 0.00219124 0.00218003 0.00216888 0.00215778 0.00214673 0.00213573 +0.00212479 0.00211389 0.00210305 0.00209226 0.00208152 0.00207083 0.00206019 +0.0020496 0.00203906 0.00202857 0.00201814 0.00200774 0.0019974 0.00198711 +0.00197687 0.00196667 0.00195653 0.00194643 0.00193638 0.00192638 0.00191642 +0.00190652 0.00189666 0.00188684 0.00187708 0.00186736 0.00185768 0.00184806 +0.00183847 0.00182894 0.00181945 0.00181 0.0018006 0.00179125 0.00178194 +0.00177267 0.00176345 0.00175428 0.00174514 0.00173605 0.00172701 0.00171801 +0.00170905 0.00170013 0.00169126 0.00168243 0.00167364 0.0016649 0.0016562 +0.00164753 0.00163892 0.00163034 0.0016218 0.00161331 0.00160485 0.00159644 +0.00158807 0.00157974 0.00157144 0.00156319 0.00155498 0.00154681 0.00153868 +0.00153059 0.00152253 0.00151452 0.00150654 0.00149861 0.00149071 0.00148285 +0.00147503 0.00146725 0.0014595 0.00145179 0.00144412 0.00143649 0.0014289 +0.00142134 0.00141382 0.00140633 0.00139889 0.00139148 0.0013841 0.00137676 +0.00136946 0.00136219 0.00135496 0.00134777 0.00134061 0.00133348 0.00132639 +0.00131934 0.00131232 0.00130533 0.00129838 0.00129146 0.00128458 0.00127773 +0.00127091 0.00126413 0.00125738 0.00125067 0.00124399 0.00123734 0.00123072 +0.00122414 0.00121759 0.00121107 0.00120458 0.00119813 0.00119171 0.00118532 +0.00117896 0.00117263 0.00116634 0.00116008 0.00115384 0.00114764 0.00114147 +0.00113533 0.00112922 0.00112314 0.0011171 0.00111108 0.00110509 0.00109913 +0.0010932 0.0010873 0.00108143 0.00107559 0.00106978 0.001064 0.00105825 +0.00105253 0.00104683 0.00104116 0.00103553 0.00102992 0.00102433 0.00101878 +0.00101326 0.00100776 0.00100229 0.000996845 0.00099143 0.000986042 +0.000980682 0.000975348 0.000970042 0.000964762 0.000959509 0.000954282 +0.000949082 0.000943908 0.00093876 0.000933639 0.000928543 0.000923473 +0.000918429 0.000913411 0.000908418 0.00090345 0.000898508 0.00089359 +0.000888698 0.00088383 0.000878988 0.00087417 0.000869376 0.000864607 +0.000859863 0.000855142 0.000850446 0.000845773 0.000841125 0.0008365 +0.000831899 0.000827321 0.000822767 0.000818236 0.000813728 0.000809244 +0.000804782 0.000800343 0.000795927 0.000791534 0.000787163 0.000782815 +0.000778489 0.000774185 0.000769904 0.000765644 0.000761407 0.000757191 +0.000752997 0.000748825 0.000744674 0.000740544 0.000736436 0.000732349 +0.000728284 0.000724239 0.000720215 0.000716212 0.00071223 0.000708268 +0.000704327 0.000700406 0.000696506 0.000692625 0.000688765 0.000684925 +0.000681105 0.000677305 0.000673525 0.000669764 0.000666023 0.000662301 +0.000658599 0.000654915 0.000651252 0.000647607 0.000643981 0.000640374 +0.000636786 0.000633217 0.000629667 0.000626135 0.000622621 0.000619126 +0.000615649 0.00061219 0.00060875 0.000605327 0.000601923 0.000598536 +0.000595167 0.000591816 0.000588483 0.000585166 0.000581868 0.000578587 +0.000575323 0.000572076 0.000568846 0.000565633 0.000562438 0.000559259 +0.000556097 0.000552951 0.000549822 0.00054671 0.000543614 0.000540535 +0.000537472 0.000534425 0.000531394 0.000528379 0.00052538 0.000522397 +0.00051943 0.000516479 0.000513543 0.000510623 0.000507719 0.000504829 +0.000501956 0.000499097 0.000496254 0.000493426 0.000490613 0.000487815 +0.000485031 0.000482263 0.00047951 0.000476771 0.000474047 0.000471337 +0.000468642 0.000465961 0.000463295 0.000460642 0.000458004 0.000455381 +0.000452771 0.000450175 0.000447593 0.000445025 0.000442471 0.000439931 +0.000437404 0.00043489 0.000432391 0.000429904 0.000427431 0.000424972 +0.000422525 0.000420092 0.000417672 0.000415265 0.000412871 0.00041049 +0.000408122 0.000405766 0.000403424 0.000401093 0.000398776 0.000396471 +0.000394179 0.000391899 0.000389631 0.000387375 0.000385132 0.000382901 +0.000380682 0.000378475 0.000376281 0.000374098 0.000371927 0.000369767 +0.00036762 0.000365484 0.00036336 0.000361247 0.000359146 0.000357056 +0.000354978 0.000352911 0.000350856 0.000348811 0.000346778 0.000344756 +0.000342745 0.000340745 0.000338756 0.000336777 0.00033481 0.000332853 +0.000330907 0.000328972 0.000327047 0.000325133 0.00032323 0.000321337 +0.000319454 0.000317582 0.00031572 0.000313868 0.000312026 0.000310195 +0.000308373 0.000306562 0.000304761 0.000302969 0.000301188 0.000299416 +0.000297654 0.000295902 0.000294159 0.000292427 0.000290703 0.000288989 +0.000287285 0.00028559 0.000283905 0.000282229 0.000280562 0.000278905 +0.000277256 0.000275617 0.000273987 0.000272366 0.000270754 0.000269151 +0.000267556 0.000265971 0.000264395 0.000262827 0.000261268 0.000259718 +0.000258176 0.000256643 0.000255119 0.000253603 0.000252095 0.000250596 +0.000249105 0.000247623 0.000246149 0.000244683 0.000243226 0.000241776 +0.000240335 0.000238902 0.000237476 0.000236059 0.00023465 0.000233249 +0.000231855 0.00023047 0.000229092 0.000227722 0.000226359 0.000225005 +0.000223658 0.000222318 0.000220986 0.000219662 0.000218345 0.000217035 +0.000215733 0.000214438 0.000213151 0.00021187 0.000210597 0.000209332 +0.000208073 0.000206822 0.000205577 0.00020434 0.00020311 0.000201886 +0.00020067 0.00019946 0.000198258 0.000197062 0.000195873 0.00019469 +0.000193515 0.000192346 0.000191184 0.000190028 0.000188879 0.000187737 +0.000186601 0.000185471 0.000184348 0.000183231 0.000182121 0.000181017 +0.00017992 0.000178828 0.000177743 0.000176664 0.000175591 0.000174525 +0.000173464 0.00017241 0.000171361 0.000170319 0.000169283 0.000168252 +0.000167228 0.000166209 0.000165196 0.000164189 0.000163188 0.000162193 +0.000161203 0.000160219 0.00015924 0.000158268 0.000157301 0.000156339 +0.000155383 0.000154433 0.000153488 0.000152548 0.000151614 0.000150685 +0.000149762 0.000148844 0.000147931 0.000147024 0.000146122 0.000145225 +0.000144333 0.000143446 0.000142565 0.000141689 0.000140817 0.000139951 +0.00013909 0.000138234 0.000137383 0.000136536 0.000135695 0.000134859 +0.000134027 0.0001332 0.000132378 0.000131561 0.000130749 0.000129941 +0.000129139 0.00012834 0.000127547 0.000126758 0.000125974 0.000125194 +0.000124419 0.000123648 0.000122882 0.00012212 0.000121363 0.00012061 +0.000119862 0.000119118 0.000118379; +#A 7000 0.000117643 0.000116912 0.000116186 0.000115463 0.000114745 +0.000114031 0.000113322 0.000112616 0.000111915 0.000111218 0.000110525 +0.000109835 0.00010915 0.00010847 0.000107793 0.00010712 0.000106451 +0.000105786 0.000105125 0.000104467 0.000103814 0.000103165 0.000102519 +0.000101877 0.000101239 0.000100605 9.99749e-05 9.93481e-05 9.87252e-05 +9.81059e-05 9.74903e-05 9.68784e-05 9.627e-05 9.56654e-05 9.50643e-05 +9.44667e-05 9.38727e-05 9.32823e-05 9.26954e-05 9.2112e-05 9.1532e-05 +9.09555e-05 9.03825e-05 8.98128e-05 8.92466e-05 8.86837e-05 8.81243e-05 +8.75681e-05 8.70152e-05 8.64657e-05 8.59195e-05 8.53765e-05 8.48367e-05 +8.43002e-05 8.3767e-05 8.32369e-05 8.271e-05 8.21862e-05 8.16656e-05 +8.11481e-05 8.06337e-05 8.01224e-05 7.96142e-05 7.9109e-05 7.86069e-05 +7.81078e-05 7.76117e-05 7.71186e-05 7.66284e-05 7.61412e-05 7.5657e-05 +7.51756e-05 7.46971e-05 7.42216e-05 7.37489e-05 7.32791e-05 7.2812e-05 +7.23479e-05 7.18865e-05 7.14279e-05 7.09721e-05 7.0519e-05 7.00688e-05 +6.96211e-05 6.91763e-05 6.87341e-05 6.82946e-05 6.78577e-05 6.74235e-05 +6.6992e-05 6.65631e-05 6.61367e-05 6.5713e-05 6.52918e-05 6.48733e-05 +6.44572e-05 6.40436e-05 6.36326e-05 6.32241e-05 6.28181e-05 6.24145e-05 +6.20135e-05 6.16148e-05 6.12186e-05 6.08248e-05 6.04334e-05 6.00444e-05 +5.96578e-05 5.92735e-05 5.88916e-05 5.8512e-05 5.81348e-05 5.77598e-05 +5.73872e-05 5.70168e-05 5.66487e-05 5.62828e-05 5.59192e-05 5.55579e-05 +5.51987e-05 5.48417e-05 5.4487e-05 5.41344e-05 5.3784e-05 5.34357e-05 +5.30896e-05 5.27456e-05 5.24037e-05 5.20639e-05 5.17263e-05 5.13907e-05 +5.10571e-05 5.07256e-05 5.03962e-05 5.00688e-05 4.97434e-05 4.942e-05 +4.90987e-05 4.87793e-05 4.84619e-05 4.81464e-05 4.78329e-05 4.75214e-05 +4.72117e-05 4.6904e-05 4.65982e-05 4.62943e-05 4.59922e-05 4.5692e-05 +4.53937e-05 4.50973e-05 4.48027e-05 4.45099e-05 4.42189e-05 4.39298e-05 +4.36424e-05 4.33568e-05 4.3073e-05 4.2791e-05 4.25107e-05 4.22322e-05 +4.19554e-05 4.16804e-05 4.1407e-05 4.11353e-05 4.08654e-05 4.05971e-05 +4.03305e-05 4.00656e-05 3.98023e-05 3.95407e-05 3.92807e-05 3.90223e-05 +3.87655e-05 3.85104e-05 3.82568e-05 3.80049e-05 3.77545e-05 3.75057e-05 +3.72584e-05 3.70127e-05 3.67685e-05 3.65259e-05 3.62848e-05 3.60452e-05 +3.58071e-05 3.55705e-05 3.53354e-05 3.51018e-05 3.48696e-05 3.4639e-05 +3.44097e-05 3.41819e-05 3.39555e-05 3.37306e-05 3.35071e-05 3.3285e-05 +3.30643e-05 3.2845e-05 3.2627e-05 3.24105e-05 3.21953e-05 3.19815e-05 +3.1769e-05 3.15579e-05 3.13481e-05 3.11396e-05 3.09324e-05 3.07266e-05 +3.05221e-05 3.03189e-05 3.01169e-05 2.99162e-05 2.97168e-05 2.95187e-05 +2.93219e-05 2.91262e-05 2.89319e-05 2.87387e-05 2.85468e-05 2.83561e-05 +2.81667e-05 2.79784e-05 2.77913e-05 2.76054e-05 2.74207e-05 2.72372e-05 +2.70549e-05 2.68737e-05 2.66937e-05 2.65148e-05 2.6337e-05 2.61604e-05 +2.5985e-05 2.58106e-05 2.56374e-05 2.54652e-05 2.52942e-05 2.51243e-05 +2.49554e-05 2.47877e-05 2.4621e-05 2.44554e-05 2.42908e-05 2.41273e-05 +2.39649e-05 2.38035e-05 2.36431e-05 2.34837e-05 2.33254e-05 2.31681e-05 +2.30118e-05 2.28565e-05 2.27022e-05 2.2549e-05 2.23966e-05 2.22453e-05 +2.2095e-05 2.19456e-05 2.17972e-05 2.16497e-05 2.15032e-05 2.13576e-05 +2.1213e-05 2.10693e-05 2.09266e-05 2.07847e-05 2.06438e-05 2.05038e-05 +2.03647e-05 2.02265e-05 2.00892e-05 1.99527e-05 1.98172e-05 1.96826e-05 +1.95488e-05 1.94158e-05 1.92838e-05 1.91526e-05 1.90223e-05 1.88928e-05 +1.87641e-05 1.86363e-05 1.85093e-05 1.83831e-05 1.82578e-05 1.81333e-05 +1.80095e-05 1.78866e-05 1.77645e-05 1.76432e-05 1.75227e-05 1.74029e-05 +1.7284e-05 1.71658e-05 1.70484e-05 1.69317e-05 1.68159e-05 1.67007e-05 +1.65864e-05 1.64727e-05 1.63599e-05 1.62477e-05 1.61363e-05 1.60256e-05 +1.59157e-05 1.58065e-05 1.56979e-05 1.55901e-05 1.5483e-05 1.53766e-05 +1.52709e-05 1.51659e-05 1.50616e-05 1.4958e-05 1.48551e-05 1.47528e-05 +1.46512e-05 1.45503e-05 1.445e-05 1.43504e-05 1.42514e-05 1.41532e-05 +1.40555e-05 1.39585e-05 1.38621e-05 1.37664e-05 1.36713e-05 1.35768e-05 +1.3483e-05 1.33898e-05 1.32972e-05 1.32052e-05 1.31138e-05 1.3023e-05 +1.29328e-05 1.28432e-05 1.27542e-05 1.26658e-05 1.2578e-05 1.24908e-05 +1.24041e-05 1.2318e-05 1.22325e-05 1.21476e-05 1.20632e-05 1.19794e-05 +1.18961e-05 1.18134e-05 1.17312e-05 1.16496e-05 1.15685e-05 1.1488e-05 +1.1408e-05 1.13286e-05 1.12496e-05 1.11712e-05 1.10933e-05 1.1016e-05 +1.09391e-05 1.08628e-05 1.0787e-05 1.07116e-05 1.06368e-05 1.05625e-05 +1.04887e-05 1.04154e-05 1.03425e-05 1.02702e-05 1.01983e-05 1.01269e-05 +1.0056e-05 9.98559e-06 9.91563e-06 9.84614e-06 9.77712e-06 9.70855e-06 +9.64045e-06 9.57281e-06 9.50562e-06 9.43888e-06 9.3726e-06 9.30676e-06 +9.24135e-06 9.17639e-06 9.11187e-06 9.04778e-06 8.98412e-06 8.92089e-06 +8.85809e-06 8.79571e-06 8.73375e-06 8.6722e-06 8.61108e-06 8.55037e-06 +8.49006e-06 8.43016e-06 8.37067e-06 8.31158e-06 8.25289e-06 8.19459e-06 +8.1367e-06 8.07919e-06 8.02207e-06 7.96534e-06 7.90899e-06 7.85303e-06 +7.79744e-06 7.74223e-06 7.68739e-06 7.63293e-06 7.57883e-06 7.52511e-06 +7.47174e-06 7.41875e-06 7.36611e-06 7.31382e-06 7.2619e-06 7.21033e-06 +7.1591e-06 7.10823e-06 7.0577e-06 7.00752e-06 6.95768e-06 6.90818e-06 +6.85902e-06 6.81019e-06 6.76169e-06 6.71353e-06 6.66569e-06 6.61819e-06 +6.571e-06 6.52414e-06 6.47759e-06 6.43137e-06 6.38546e-06 6.33987e-06 +6.29459e-06 6.24962e-06 6.20495e-06 6.1606e-06 6.11654e-06 6.07279e-06 +6.02934e-06 5.98619e-06 5.94333e-06 5.90077e-06 5.8585e-06 5.81652e-06 +5.77482e-06 5.73342e-06 5.6923e-06 5.65146e-06 5.6109e-06 5.57063e-06 +5.53062e-06 5.4909e-06 5.45145e-06 5.41227e-06 5.37336e-06 5.33472e-06 +5.29634e-06 5.25823e-06 5.22038e-06 5.1828e-06 5.14547e-06 5.10841e-06 +5.07159e-06 5.03503e-06 4.99873e-06 4.96268e-06 4.92687e-06 4.89131e-06 +4.856e-06 4.82094e-06 4.78612e-06 4.75153e-06 4.71719e-06 4.68309e-06 +4.64922e-06 4.61559e-06 4.58219e-06 4.54903e-06 4.51609e-06 4.48338e-06 +4.4509e-06 4.41865e-06 4.38662e-06 4.35481e-06 4.32322e-06 4.29186e-06 +4.26071e-06 4.22978e-06 4.19906e-06 4.16856e-06 4.13828e-06 4.1082e-06 +4.07833e-06 4.04867e-06 4.01922e-06 3.98997e-06 3.96093e-06 3.9321e-06 +3.90346e-06 3.87502e-06 3.84678e-06 3.81874e-06 3.7909e-06 3.76325e-06 +3.73579e-06 3.70853e-06 3.68146e-06 3.65458e-06 3.62788e-06 3.60138e-06 +3.57506e-06 3.54892e-06 3.52297e-06 3.4972e-06 3.47161e-06 3.4462e-06 +3.42097e-06 3.39592e-06 3.37104e-06 3.34634e-06 3.32181e-06 3.29746e-06 +3.27327e-06 3.24926e-06 3.22541e-06 3.20174e-06 3.17823e-06 3.15489e-06 +3.13171e-06 3.10869e-06 3.08584e-06 3.06315e-06 3.04062e-06 3.01825e-06 +2.99604e-06 2.97398e-06 2.95208e-06 2.93034e-06 2.90874e-06 2.8873e-06 +2.86602e-06 2.84488e-06 2.8239e-06 2.80306e-06 2.78237e-06 2.76183e-06 +2.74143e-06 2.72118e-06 2.70107e-06 2.68111e-06 2.66129e-06 2.6416e-06 +2.62206e-06 2.60266e-06 2.58339e-06 2.56426e-06 2.54527e-06 2.52642e-06 +2.50769e-06 2.4891e-06 2.47065e-06 2.45232e-06 2.43413e-06 2.41606e-06 +2.39813e-06 2.38032e-06 2.36264e-06 2.34508e-06 2.32766e-06 2.31035e-06 +2.29317e-06 2.27611e-06 2.25918e-06 2.24237e-06 2.22567e-06 2.2091e-06 +2.19264e-06 2.1763e-06 2.16008e-06 2.14398e-06 2.12799e-06 2.11212e-06 +2.09635e-06 2.08071e-06 2.06517e-06 2.04975e-06 2.03444e-06 2.01924e-06 +2.00414e-06 1.98916e-06 1.97428e-06 1.95951e-06 1.94485e-06 1.93029e-06 +1.91584e-06 1.90149e-06 1.88724e-06 1.8731e-06 1.85906e-06 1.84512e-06 +1.83128e-06 1.81754e-06 1.8039e-06 1.79036e-06 1.77692e-06 1.76357e-06 +1.75032e-06 1.73717e-06 1.72411e-06 1.71115e-06 1.69828e-06 1.6855e-06 +1.67282e-06 1.66022e-06 1.64772e-06 1.63531e-06 1.62299e-06 1.61076e-06 +1.59862e-06 1.58656e-06 1.57459e-06 1.56272e-06 1.55092e-06 1.53921e-06 +1.52759e-06 1.51605e-06 1.5046e-06 1.49323e-06 1.48194e-06 1.47073e-06 +1.45961e-06 1.44856e-06 1.4376e-06 1.42672e-06 1.41591e-06 1.40519e-06 +1.39454e-06 1.38397e-06 1.37348e-06 1.36306e-06 1.35272e-06 1.34246e-06 +1.33227e-06 1.32216e-06 1.31212e-06 1.30215e-06 1.29226e-06 1.28243e-06 +1.27269e-06 1.26301e-06 1.2534e-06 1.24386e-06 1.2344e-06 1.225e-06 +1.21567e-06 1.20641e-06 1.19722e-06 1.18809e-06 1.17904e-06 1.17004e-06 +1.16112e-06 1.15226e-06 1.14347e-06 1.13474e-06 1.12607e-06 1.11747e-06 +1.10893e-06 1.10046e-06 1.09204e-06 1.08369e-06 1.0754e-06 1.06717e-06 +1.05901e-06 1.0509e-06 1.04285e-06 1.03486e-06 1.02693e-06 1.01906e-06 +1.01125e-06 1.0035e-06 9.958e-07 9.8816e-07 9.80576e-07 9.73048e-07 +9.65576e-07 9.58159e-07 9.50797e-07 9.4349e-07 9.36237e-07 9.29038e-07 +9.21891e-07 9.14798e-07 9.07758e-07 9.0077e-07 8.93834e-07 8.86949e-07 +8.80116e-07 8.73333e-07 8.666e-07 8.59918e-07 8.53285e-07 8.46702e-07 +8.40168e-07 8.33682e-07 8.27245e-07 8.20856e-07 8.14513e-07 8.08219e-07 +8.01971e-07 7.95771e-07 7.89615e-07 7.83506e-07 7.77443e-07 7.71426e-07 +7.65452e-07 7.59524e-07 7.5364e-07 7.478e-07 7.42003e-07 7.3625e-07 +7.3054e-07 7.24873e-07 7.19247e-07 7.13664e-07 7.08123e-07 7.02624e-07 +6.97166e-07 6.91748e-07 6.86371e-07 6.81035e-07 6.75739e-07 6.70482e-07 +6.65265e-07 6.60087e-07 6.54948e-07 6.49847e-07 6.44785e-07 6.39761e-07 +6.34775e-07 6.29826e-07 6.24914e-07 6.2004e-07 6.15202e-07 6.104e-07 +6.05635e-07 6.00906e-07 5.96212e-07 5.91554e-07 5.86931e-07 5.82343e-07 +5.77789e-07 5.73269e-07 5.68784e-07 5.64333e-07 5.59915e-07 5.55531e-07 +5.5118e-07 5.46862e-07 5.42576e-07 5.38323e-07 5.34102e-07 5.29914e-07 +5.25756e-07 5.2163e-07 5.17536e-07 5.13473e-07 5.0944e-07 5.05438e-07 +5.01466e-07 4.97525e-07 4.93613e-07 4.89731e-07 4.85879e-07 4.82056e-07 +4.78262e-07 4.74496e-07 4.7076e-07 4.67052e-07 4.63372e-07 4.5972e-07 +4.56095e-07 4.52499e-07 4.4893e-07 4.45388e-07 4.41873e-07 4.38385e-07 +4.34923e-07 4.31488e-07 4.28079e-07 4.24696e-07 4.21339e-07 4.18007e-07 +4.14701e-07 4.11421e-07 4.08165e-07 4.04934e-07 4.01728e-07 3.98547e-07 +3.95389e-07 3.92256e-07 3.89147e-07 3.86062e-07 3.83001e-07 3.79963e-07 +3.76948e-07 3.73956e-07 3.70987e-07 3.68041e-07 3.65118e-07 3.62217e-07 +3.59338e-07 3.56482e-07 3.53647e-07 3.50835e-07 3.48043e-07 3.45274e-07 +3.42525e-07 3.39798e-07 3.37092e-07 3.34406e-07 3.31742e-07 3.29098e-07 +3.26474e-07 3.2387e-07 3.21286e-07 3.18723e-07 3.16179e-07 3.13655e-07 +3.1115e-07 3.08665e-07 3.06198e-07 3.03751e-07 3.01323e-07 2.98914e-07 +2.96523e-07 2.9415e-07 2.91797e-07 2.89461e-07 2.87143e-07 2.84843e-07 +2.82561e-07 2.80297e-07 2.7805e-07 2.75821e-07 2.73609e-07 2.71414e-07 +2.69237e-07 2.67076e-07 2.64932e-07 2.62804e-07 2.60693e-07 2.58599e-07 +2.5652e-07 2.54458e-07 2.52412e-07 2.50382e-07 2.48368e-07 2.46369e-07 +2.44386e-07 2.42418e-07 2.40466e-07 2.38529e-07 2.36606e-07 2.34699e-07 +2.32807e-07 2.3093e-07 2.29067e-07 2.27219e-07 2.25385e-07 2.23565e-07 +2.2176e-07 2.19969e-07 2.18192e-07 2.16429e-07 2.14679e-07 2.12943e-07 +2.11221e-07 2.09512e-07 2.07817e-07 2.06135e-07 2.04466e-07 2.0281e-07 +2.01167e-07 1.99537e-07 1.9792e-07 1.96315e-07 1.94723e-07 1.93144e-07 +1.91577e-07 1.90022e-07 1.8848e-07 1.86949e-07 1.85431e-07 1.83924e-07 +1.8243e-07 1.80947e-07 1.79476e-07 1.78016e-07 1.76568e-07 1.75131e-07 +1.73706e-07 1.72292e-07 1.70889e-07 1.69497e-07 1.68116e-07 1.66746e-07 +1.65387e-07 1.64038e-07 1.627e-07 1.61373e-07 1.60056e-07 1.5875e-07 +1.57454e-07 1.56168e-07 1.54892e-07 1.53627e-07 1.52371e-07 1.51125e-07 +1.4989e-07 1.48664e-07 1.47447e-07 1.46241e-07 1.45044e-07 1.43856e-07 +1.42678e-07 1.41509e-07 1.4035e-07 1.39199e-07 1.38058e-07 1.36926e-07 +1.35803e-07 1.34688e-07 1.33583e-07 1.32486e-07 1.31399e-07 1.30319e-07 +1.29249e-07 1.28187e-07 1.27133e-07 1.26088e-07 1.25051e-07 1.24022e-07 +1.23002e-07 1.21989e-07 1.20985e-07 1.19989e-07 1.19e-07 1.1802e-07 +1.17047e-07 1.16083e-07 1.15125e-07 1.14176e-07 1.13234e-07 1.123e-07 +1.11373e-07 1.10453e-07 1.09541e-07 1.08636e-07 1.07739e-07 1.06848e-07 +1.05965e-07 1.05089e-07 1.0422e-07 1.03357e-07 1.02502e-07 1.01654e-07 +1.00812e-07 9.99773e-08 9.91491e-08 9.83276e-08 9.75126e-08 9.67043e-08 +9.59023e-08 9.5107e-08 9.43179e-08 9.35352e-08 9.27589e-08 9.19887e-08 +9.12247e-08 9.04669e-08 8.97152e-08 8.89696e-08 8.823e-08 8.74963e-08 +8.67685e-08 8.60467e-08 8.53305e-08 8.46203e-08 8.39157e-08 8.32169e-08 +8.25236e-08 8.1836e-08 8.11539e-08 8.04774e-08 7.98062e-08; +#A 8000 7.91406e-08 7.84803e-08 7.78254e-08 7.71757e-08 7.65314e-08 +7.58922e-08 7.52582e-08 7.46293e-08 7.40056e-08 7.33868e-08 7.27733e-08 +7.21645e-08 7.15607e-08 7.09619e-08 7.03679e-08 6.97786e-08 6.91943e-08 +6.86146e-08 6.80397e-08 6.74694e-08 6.69038e-08 6.63428e-08 6.57863e-08 +6.52343e-08 6.46869e-08 6.41438e-08 6.36053e-08 6.30711e-08 6.25413e-08 +6.20158e-08 6.14946e-08 6.09775e-08 6.04648e-08 5.99562e-08 5.94518e-08 +5.89515e-08 5.84552e-08 5.79631e-08 5.74749e-08 5.69907e-08 5.65105e-08 +5.60342e-08 5.55619e-08 5.50933e-08 5.46286e-08 5.41677e-08 5.37106e-08 +5.32572e-08 5.28076e-08 5.23616e-08 5.19193e-08 5.14806e-08 5.10455e-08 +5.0614e-08 5.0186e-08 4.97615e-08 4.93405e-08 4.89229e-08 4.85089e-08 +4.80982e-08 4.76908e-08 4.72869e-08 4.68862e-08 4.64888e-08 4.60948e-08 +4.57039e-08 4.53163e-08 4.49318e-08 4.45505e-08 4.41724e-08 4.37974e-08 +4.34254e-08 4.30566e-08 4.26907e-08 4.2328e-08 4.19681e-08 4.16113e-08 +4.12574e-08 4.09064e-08 4.05583e-08 4.02131e-08 3.98708e-08 3.95313e-08 +3.91946e-08 3.88606e-08 3.85295e-08 3.82011e-08 3.78753e-08 3.75523e-08 +3.7232e-08 3.69143e-08 3.65993e-08 3.62868e-08 3.5977e-08 3.56697e-08 +3.53649e-08 3.50628e-08 3.4763e-08 3.44659e-08 3.41711e-08 3.38788e-08 +3.3589e-08 3.33015e-08 3.30164e-08 3.27337e-08 3.24534e-08 3.21754e-08 +3.18997e-08 3.16263e-08 3.13552e-08 3.10863e-08 3.08196e-08 3.05552e-08 +3.0293e-08 3.0033e-08 2.97752e-08 2.95194e-08 2.92659e-08 2.90144e-08 +2.8765e-08 2.85178e-08 2.82726e-08 2.80294e-08 2.77883e-08 2.75492e-08 +2.73121e-08 2.70769e-08 2.68437e-08 2.66126e-08 2.63833e-08 2.61559e-08 +2.59305e-08 2.57069e-08 2.54852e-08 2.52654e-08 2.50473e-08 2.48312e-08 +2.46168e-08 2.44043e-08 2.41935e-08 2.39845e-08 2.37773e-08 2.35718e-08 +2.33679e-08 2.31659e-08 2.29655e-08 2.27668e-08 2.25698e-08 2.23744e-08 +2.21807e-08 2.19886e-08 2.17981e-08 2.16093e-08 2.1422e-08 2.12363e-08 +2.10522e-08 2.08696e-08 2.06886e-08 2.0509e-08 2.0331e-08 2.01545e-08 +1.99795e-08 1.9806e-08 1.96339e-08 1.94633e-08 1.92941e-08 1.91264e-08 +1.896e-08 1.87951e-08 1.86316e-08 1.84695e-08 1.83087e-08 1.81493e-08 +1.79912e-08 1.78345e-08 1.76791e-08 1.7525e-08 1.73722e-08 1.72207e-08 +1.70705e-08 1.69216e-08 1.6774e-08 1.66276e-08 1.64824e-08 1.63385e-08 +1.61957e-08 1.60543e-08 1.5914e-08 1.57749e-08 1.56369e-08 1.55002e-08 +1.53646e-08; +#X coords 0 1 8191 -1 200 140 1; +#X restore 62 180 graph; +#N canvas 603 425 305 177 messages 0; +#X obj 108 126 outlet; +#X msg 219 110 clear; +#N canvas 516 517 705 388 addsyn 0; +#X obj 39 47 tgl 40 0 empty empty empty 0 -6 0 8 -188364 -1 -1 0 1 +; +#X msg 39 93 normalize \$1; +#X text 84 73 on by default; +#X msg 194 88 addsyn 0.5 0.5; +#X msg 194 45 addsyn 0 1; +#X text 272 47 sine; +#X text 299 88 raised sine; +#X msg 134 190 addsyn 0 1 0 0.333 0 0.2 0 0.143 0 0.111 0 0.091 0 0.077 +0 0.067; +#X obj 39 296 outlet; +#X msg 133 222 addsyn 0 1 0 -0.111 0 0.04 0 -0.02 0 0.012 0 -0.008 +0 0.006 0 -0.004; +#X msg 135 256 addsyn 0 1 0.5 0.333 0.25 0.2 0.167 0.143 0.125; +#X text 568 197 square; +#X text 554 226 triangle; +#X text 532 258 sawtooth; +#X msg 135 280 addsyn 0 1 -0.5 0.5 -0.25; +#X text 319 280 or whatever; +#X msg 194 66 addsyn 0.35; +#X text 286 66 DC (turn off normalization first); +#X connect 0 0 1 0; +#X connect 1 0 8 0; +#X connect 3 0 8 0; +#X connect 4 0 8 0; +#X connect 7 0 8 0; +#X connect 9 0 8 0; +#X connect 10 0 8 0; +#X connect 14 0 8 0; +#X connect 16 0 8 0; +#X restore 108 16 pd addsyn; +#N canvas 713 435 486 336 envelopes 0; +#X obj 12 295 outlet; +#X msg 78 121 aenv 0.5; +#X msg 70 103 aenv 0.025; +#X msg 20 50 adenv 0.05 0.15; +#X msg 12 31 adenv 0.05 0.15 0.7; +#X text 9 8 all time values relative to 1; +#X text 159 31 optional 3rd arg: secondary gain; +#X msg 233 126 adrenv 0.05 0.1 0.3; +#X msg 237 145 adrenv 0.05 0.1 0.3 0.7; +#X msg 83 141 aenv 0.95; +#X msg 238 169 adrenv 0.15 0.05 0.55 0.5; +#X msg 223 218 rcos; +#X msg 223 238 gaussian; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 0 0; +#X restore 14 64 pd envelopes; +#N canvas 752 285 474 324 graphic-harm 0; +#X obj 134 270 outlet; +#X obj 134 11 vsl 15 64 0.0001 1 0 0 empty empty empty 0 -8 0 8 -101888 +-1 -1 0 1; +#X msg 134 127 0; +#X obj 134 84 t b f; +#X obj 176 11 vsl 15 64 0 1 0 0 empty empty empty 0 -8 0 8 -101888 +-1 -1 0 1; +#X obj 176 84 t b f; +#X obj 220 11 vsl 15 64 0 1 0 0 empty empty empty 0 -8 0 8 -101888 +-1 -1 0 1; +#X obj 220 84 t b f; +#X obj 264 11 vsl 15 64 0 1 0 0 empty empty empty 0 -8 0 8 -101888 +-1 -1 0 1; +#X obj 264 84 t b f; +#X obj 134 188 pack f f f f f; +#X msg 134 227 addsyn \$1 \$2 \$3 \$4 \$5; +#X connect 1 0 3 0; +#X connect 2 0 10 0; +#X connect 3 0 2 0; +#X connect 3 1 10 1; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X connect 5 1 10 2; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X connect 7 1 10 3; +#X connect 8 0 9 0; +#X connect 9 0 2 0; +#X connect 9 1 10 4; +#X connect 10 0 11 0; +#X connect 11 0 0 0; +#X restore 160 48 pd graphic-harm; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X restore 65 101 pd messages; +#X obj 23 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 24 50 function~ provides different tools for writing functions +into an array.; +#X text 148 97 <- click here for details; +#X connect 2 0 0 0; diff --git a/externals/lyonpotpourri/function~.c b/externals/lyonpotpourri/function~.c new file mode 100755 index 000000000..d875e06e7 --- /dev/null +++ b/externals/lyonpotpourri/function~.c @@ -0,0 +1,380 @@ +#include "MSPd.h" + +/* comment */ + +static t_class *function_class; +#define OBJECT_NAME "function~" + +typedef struct _function +{ + t_object x_obj; + t_float x_f; + t_symbol *wavename; // name of waveform buffer + + int b_frames; + int b_nchans; + t_word *b_samples; + short normalize; +} t_function; + +void function_setbuf(t_function *x, t_symbol *wavename); +void *function_new(t_symbol *msg, int argc, t_atom *argv); +void function_dsp(t_function *x, t_signal **sp); +void function_redraw(t_function *x); +void function_clear(t_function *x); +void function_addsyn(t_function *x, t_symbol *msg, int argc, t_atom *argv); +void function_aenv(t_function *x, t_symbol *msg, int argc, t_atom *argv); +void function_adenv(t_function *x, t_symbol *msg, int argc, t_atom *argv); +void function_normalize(t_function *x, t_floatarg f); +void function_adrenv(t_function *x, t_symbol *msg, int argc, t_atom *argv); +void function_rcos(t_function *x); +void function_gaussian(t_function *x); +void function_print(t_function *x); + +void function_tilde_setup(void) +{ + function_class = class_new(gensym("function~"), (t_newmethod)function_new, + NO_FREE_FUNCTION,sizeof(t_function), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(function_class, t_function, x_f); + class_addmethod(function_class,(t_method)function_dsp,gensym("dsp"),0); + class_addmethod(function_class,(t_method)function_addsyn,gensym("addsyn"),A_GIMME,0); + class_addmethod(function_class,(t_method)function_aenv,gensym("aenv"),A_GIMME,0); + class_addmethod(function_class,(t_method)function_adenv,gensym("adenv"),A_GIMME,0); + class_addmethod(function_class,(t_method)function_adrenv,gensym("adrenv"),A_GIMME,0); + class_addmethod(function_class,(t_method)function_clear,gensym("clear"),0); + class_addmethod(function_class,(t_method)function_normalize,gensym("normalize"),A_FLOAT,0); + class_addmethod(function_class,(t_method)function_rcos,gensym("rcos"),0); + class_addmethod(function_class,(t_method)function_gaussian,gensym("gaussian"),0); + class_addmethod(function_class,(t_method)function_print,gensym("print"),0); + potpourri_announce(OBJECT_NAME); +} + +void function_rcos(t_function *x) +{ + int i; + long b_frames; + t_word *b_samples; + function_setbuf(x, x->wavename); + b_samples = x->b_samples; + b_frames = x->b_frames; + if(b_frames == 0){ + return; + } + for(i=0;i<b_frames;i++){ + x->b_samples[i].w_float = (t_float) (0.5 - 0.5 * cos(TWOPI * (t_float)i/(t_float)b_frames)); + } + function_redraw(x); + /* for(i=0;i<b_frames;i++){ + post("%f", x->b_samples[i].w_float); + } */ +} + +/* +void function_rcos(t_function *x) +{ + int i; + long b_frames; + t_word *b_samples; + t_symbol *wavename = x->wavename; + int frames; + t_garray *a; + + x->b_frames = 0; + x->b_nchans = 1; + // open array + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "function~: %s: no such array", wavename->s_name); + } + else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { + pd_error(x, "%s: bad template for function~", wavename->s_name); + } + else { + x->b_frames = frames; + garray_usedindsp(a); + } + b_frames = x->b_frames; + post("rcos generating %d frames", b_frames); // correct + // put samples into array + for(i=0;i<b_frames;i++){ + x->b_samples[i].w_float = (t_float) (0.5 - 0.5 * cos(TWOPI * (t_float)i/(t_float)b_frames)); + } + if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { + if (*x->wavename->s_name) pd_error(x, "function~: %s: no such array", x->wavename->s_name); + } + else { + garray_redraw(a); + } + // printed samples are correct + for(i=0;i<b_frames;i++){ + post("%f", x->b_samples[i].w_float); + } +} +*/ +void function_print(t_function *x) +{ + int frames; + t_garray *a; + int i; + x->b_frames = 0; + x->b_nchans = 1; + if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { + if (*x->wavename->s_name) pd_error(x, "function~: %s: no such array", x->wavename->s_name); + } + else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { + pd_error(x, "%s: bad template for function~", x->wavename->s_name); + } + else { + x->b_frames = frames; + garray_usedindsp(a); + for(i = 0; i < frames; i++){ + post("%d: %f",i, x->b_samples[i].w_float); + } + } +} + + +void function_gaussian(t_function *x) +{ + int i; + long b_frames; + t_word *b_samples; + t_float arg, xarg,in; + + if(!b_frames){ + post("* zero length function!"); + return; + } + function_setbuf(x, x->wavename); + b_frames = x->b_frames; + b_samples = x->b_samples; + arg = 12.0 / (t_float)b_frames; + xarg = 1.0; + in = -6.0; + + for(i=0;i<b_frames;i++){ + b_samples[i].w_float = xarg * pow(2.71828, -(in*in)/2.0); + in += arg; + } + function_redraw(x); +} + +void function_normalize(t_function *x, t_floatarg f) +{ + x->normalize = (short)f; +} + +void function_clear(t_function *x) +{ + int i; + long b_frames = x->b_frames; + t_word *b_samples = x->b_samples; + + function_setbuf(x, x->wavename); + b_frames = x->b_frames; + b_samples = x->b_samples; + for(i=0;i<b_frames;i++) + b_samples[i].w_float = 0.0; + function_redraw(x); +} + +void function_adrenv(t_function *x, t_symbol *msg, int argc, t_atom *argv) +{ + int i,j; + int al, dl, sl, rl; + long b_frames = x->b_frames; + t_word *b_samples = x->b_samples; + t_float downgain = 0.33; + + function_setbuf(x, x->wavename); + al = (t_float) b_frames * atom_getfloatarg(0,argc,argv); + dl = (t_float) b_frames * atom_getfloatarg(1,argc,argv); + rl = (t_float) b_frames * atom_getfloatarg(2,argc,argv); + downgain = atom_getfloatarg(3,argc,argv); + if(downgain <= 0) + downgain = 0.333; + if(al+dl+rl >= b_frames){ + post("atk and dk and release are too long"); + return; + } + sl = b_frames - (al+dl+rl); + + for(i=0;i<al;i++){ + b_samples[i].w_float = (t_float)i/(t_float)al; + } + for(i=al, j=dl;i<al+dl;i++,j--){ + b_samples[i].w_float = downgain + (1.-downgain)*(t_float)j/(t_float)dl; + } + for(i=al+dl;i<al+dl+sl;i++){ + b_samples[i].w_float = downgain; + } + for(i=al+dl+sl,j=rl;i<b_frames;i++,j--){ + b_samples[i].w_float = downgain * (t_float)j/(t_float)rl; + } + function_redraw(x); +} + +void function_adenv(t_function *x, t_symbol *msg, int argc, t_atom *argv) +{ + int i,j; + int al, dl, rl; + long b_frames = x->b_frames; + t_word *b_samples = x->b_samples; + t_float downgain = 0.33; + + function_setbuf(x, x->wavename); + al = (t_float) b_frames * atom_getfloatarg(0,argc,argv); + dl = (t_float) b_frames * atom_getfloatarg(1,argc,argv); + downgain = atom_getfloatarg(2,argc,argv); + if(downgain <= 0) + downgain = 0.333; + if(al+dl >= b_frames){ + post("atk and dk are too long"); + return; + } + rl = b_frames - (al+dl); + + for(i=0;i<al;i++){ + b_samples[i].w_float = (t_float)i/(t_float)al; + } + for(i=al, j=dl;i<al+dl;i++,j--){ + b_samples[i].w_float = downgain + (1.-downgain)*(t_float)j/(t_float)dl; + } + for(i=al+dl,j=rl;i<b_frames;i++,j--){ + b_samples[i].w_float = downgain * (t_float)j/(t_float)rl; + } + function_redraw(x); +} + +void function_aenv(t_function *x, t_symbol *msg, int argc, t_atom *argv) +{ + int i,j; + int al, dl; + long b_frames = x->b_frames; + t_word *b_samples = x->b_samples; + t_float frac; + frac = atom_getfloatarg(0,argc,argv); + + function_setbuf(x, x->wavename); + if(frac <= 0 || frac >= 1){ + post("* attack time must range from 0.0 - 1.0, rather than %f",frac); + } + + al = b_frames * frac; + + dl = b_frames - al; + for(i=0;i<al;i++){ + b_samples[i].w_float = (t_float)i/(t_float)al; + } + for(i=al, j=dl;i<b_frames;i++,j--){ + b_samples[i].w_float = (t_float)j/(t_float)dl; + } + function_redraw(x); +} + +void function_addsyn(t_function *x, t_symbol *msg, int argc, t_atom *argv) +{ + int i,j; + long b_frames; + t_word *b_samples; + t_float amp; + t_float maxamp, rescale; + t_float theSample; + + /* for(i = 0; i < argc; i++){ + post("argument %d: %f",i, atom_getfloatarg(i,argc,argv)); + }*/ + + function_setbuf(x, x->wavename); + b_samples = x->b_samples; + b_frames = x->b_frames; + amp = atom_getfloatarg(0,argc,argv); + // post("harmonic: 0, weight: %.12f", (float)amp); + for(i=0;i<b_frames;i++){ + b_samples[i].w_float = amp; + } + for(j=1;j<argc;j++){ + amp = atom_getfloatarg(j,argc,argv); + if(amp){ + // post("harmonic: %d, weight: %.12f", j, (t_float)amp); + for(i=0;i<b_frames;i++){ + theSample = amp * sin(TWOPI * (t_float) j * (t_float)i/(t_float)b_frames); + b_samples[i].w_float += theSample; + // post("%d: %f", i, (t_float)b_samples[i].w_float); + } + } + } + + if(x->normalize){ + maxamp = 0; + for(i=0;i<b_frames;i++){ + if(maxamp < fabs(b_samples[i].w_float)) + maxamp = fabs(b_samples[i].w_float); + } + if(!maxamp){ + post("* zero maxamp!"); + return; + } + rescale = 1.0 / maxamp; + for(i=0;i<b_frames;i++){ + b_samples[i].w_float *= rescale; + } + } + + /* + for(i=0;i<b_frames;i++){ + post("%f", x->b_samples[i].w_float); + } + */ + function_redraw(x); +} + + +void *function_new(t_symbol *msg, int argc, t_atom *argv) +{ + + t_function *x = (t_function *)pd_new(function_class); + outlet_new(&x->x_obj, gensym("signal")); + x->wavename = atom_getsymbolarg(0,argc,argv); + x->normalize = 1; +// post("float size: %d, t_float size: %d, t_word size %d", sizeof(float), sizeof(t_float), sizeof(t_word)); +// post("latest version"); + return x; +} + +void function_setbuf(t_function *x, t_symbol *wavename) +{ + int frames; + t_garray *a; + + x->b_frames = 0; + x->b_nchans = 1; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "function~: %s: no such array", wavename->s_name); + } + else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { + pd_error(x, "%s: bad template for function~", wavename->s_name); + } + else { + x->b_frames = frames; + garray_usedindsp(a); + // post("%d frames in buffer", x->b_frames); + } +} + +void function_redraw(t_function *x) +{ + t_garray *a; + if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { + if (*x->wavename->s_name) pd_error(x, "function~: %s: no such array", x->wavename->s_name); + } + else { + garray_redraw(a); + } +} + + + +void function_dsp(t_function *x, t_signal **sp) +{ +} + diff --git a/externals/lyonpotpourri/granola~-help.pd b/externals/lyonpotpourri/granola~-help.pd new file mode 100755 index 000000000..ede6eb0be --- /dev/null +++ b/externals/lyonpotpourri/granola~-help.pd @@ -0,0 +1,40 @@ +#N canvas 316 98 349 304 10; +#X obj 96 238 dac~; +#X obj 96 83 phasor~ 450; +#X floatatom 186 105 5 0 0 2 - g-transpose -, f 5; +#X obj 96 212 *~ 0.05; +#X obj 189 83 hsl 128 15 0.1 3 0 0 g-transpose granola-transpose-in +transpose_factor -2 -6 0 10 -4075 -1 -1 3941 1; +#X obj 25 79 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X msg 25 111 mute \$1; +#X obj 145 178 hsl 90 12 0 0.1 0 0 empty granola-gain-in gain -2 -8 +0 10 -212981 -1 -1 4450 1; +#X floatatom 142 192 5 0 0 0 - - -, f 5; +#X obj 23 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 96 142 granola~ 100; +#X obj 96 114 killdc~; +#N canvas 235 115 191 186 initialize 0; +#X msg 3 111 1; +#X obj 3 88 loadbang; +#X obj 3 133 s granola-transpose-in; +#X obj 3 63 s granola-gain-in; +#X obj 3 18 loadbang; +#X msg 3 41 0.05; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X restore 135 238 pd initialize; +#X text 24 42 granola~ - a granular pitch transposer; +#X connect 1 0 11 0; +#X connect 2 0 10 1; +#X connect 3 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 10 0; +#X connect 7 0 8 0; +#X connect 8 0 3 1; +#X connect 10 0 3 0; +#X connect 11 0 10 0; diff --git a/externals/lyonpotpourri/granola~.c b/externals/lyonpotpourri/granola~.c new file mode 100755 index 000000000..adb6735b3 --- /dev/null +++ b/externals/lyonpotpourri/granola~.c @@ -0,0 +1,330 @@ +#include "MSPd.h" + + +static t_class *granola_class; + +#define OBJECT_NAME "granola~" + +typedef struct _granola +{ + + t_object x_obj; + float x_f; + float *gbuf; + long grainsamps; + long buflen ; // length of buffer + int maxgrainsamps; // set maximum delay in ms. + float grain_duration; // user grain duration in seconds + float sr; + float *grainenv; + long gpt1; // grain pointer 1 + long gpt2; // grain pointer 2 + long gpt3; // grain pointer 3 + float phs1; // phase 1 + float phs2; // phase 2 + float phs3; // phase 3 + float incr; + long curdel; + short mute_me; + short iconnect; + +} t_granola; + + + +void *granola_new(t_floatarg val); +t_int *offset_perform(t_int *w); +t_int *granola_perform(t_int *w); +void granola_dsp(t_granola *x, t_signal **sp); +void granola_mute(t_granola *x, t_floatarg toggle); +void granola_float(t_granola *x, double f ) ; +void granola_dsp_free(t_granola *x); +void granola_size(t_granola *x, t_floatarg newsize); +void granola_clear(t_granola *x); +void granola_init(t_granola *x); + +void granola_tilde_setup(void){ + granola_class = class_new(gensym("granola~"), (t_newmethod)granola_new, + (t_method)granola_dsp_free ,sizeof(t_granola), 0,A_FLOAT,0); + CLASS_MAINSIGNALIN(granola_class, t_granola, x_f); + class_addmethod(granola_class,(t_method)granola_dsp,gensym("dsp"),0); + class_addmethod(granola_class,(t_method)granola_clear,gensym("clear"),0); + class_addmethod(granola_class,(t_method)granola_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(granola_class,(t_method)granola_size,gensym("size"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + + +void granola_float(t_granola *x, double f) { + x->incr = f; +} + +void granola_dsp_free(t_granola *x) +{ + + free(x->gbuf); + free(x->grainenv); +} + + +void granola_mute(t_granola *x, t_floatarg toggle) +{ + x->mute_me = (short)toggle; +} + +void granola_clear(t_granola *x) { + memset((char *)x->gbuf, 0, x->buflen); +} + +void granola_size(t_granola *x, t_floatarg newsize) { + int newsamps, i; + newsamps = newsize * 0.001 * sys_getsr(); + if( newsamps >= x->maxgrainsamps ){ + error("granola~: specified size over preset maximum, no action taken"); + return; + } + if( newsamps < 8 ){ + error("granola~: grainsize too small"); + return; + } + x->grainsamps = newsamps; // will use for shrinkage + x->buflen = x->grainsamps * 4; + for(i = 0; i < x->grainsamps; i++ ){ + x->grainenv[i] = .5 + (-.5 * cos( TWOPI * ((float)i/(float)x->grainsamps) ) ); + } + x->gpt1 = 0; + x->gpt2 = x->grainsamps / 3.; + x->gpt3 = 2. * x->grainsamps / 3.; + x->phs1 = 0; + x->phs2 = x->grainsamps / 3. ; + x->phs3 = 2. * x->grainsamps / 3. ; + x->curdel = 0; +} + +void *granola_new(t_floatarg val) +{ + + t_granola *x = (t_granola *)pd_new(granola_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + // INITIALIZATIONS + x->sr = sys_getsr(); + x->grain_duration = val * 0.001; // convert to seconds + x->gbuf = NULL; + x->grainenv = NULL; + + granola_init(x); + return x; + /* + + + if( val > 0 ) { + x->grainsamps = val; + // post( "grainsize set to %.0f", val ); + } else { + x->grainsamps = 2048; + // post( "grainsize defaults to %d, val was %.0f", x->grainsamps, val ); + + } + x->buflen = x->grainsamps * 4; + x->gbuf = (float *) calloc( x->buflen, sizeof(float) ) ; + x->grainenv = (float *) calloc( x->grainsamps, sizeof(float) ); + for(i = 0; i < x->grainsamps; i++ ){ + x->grainenv[i] = .5 + (-.5 * cos( TWOPI * ((float)i/(float)x->grainsamps) ) ); + } + x->gpt1 = 0; + x->gpt2 = x->grainsamps / 3.; + x->gpt3 = 2. * x->grainsamps / 3.; + x->phs1 = 0; + x->phs2 = x->grainsamps / 3. ; + x->phs3 = 2. * x->grainsamps / 3. ; + x->incr = .5 ; + x->curdel = 0; + x->mute_me = 0; + + return (x); + */ +} + +void granola_init(t_granola *x) +{ + int i; + if(x->sr == 0){ + post("granola~: dodging zero sampling rate!"); + return; + } + x->grainsamps = x->grain_duration * x->sr; + if(x->grainsamps <= 5 || x->grainsamps > 4410000) { + x->grainsamps = 2048; + post( "granola~: grainsize autoset to %d samples, rather than user-specified length %.0f", x->grainsamps, x->grain_duration * x->sr); + } + x->maxgrainsamps = x->grainsamps; // will use for shrinkage + x->buflen = x->grainsamps * 4; + // first time only + if(x->gbuf == NULL){ + x->gbuf = (float *) calloc(x->buflen, sizeof(float)); + x->grainenv = (float *) calloc(x->grainsamps, sizeof(float)); + x->incr = .5; + x->mute_me = 0; + } + // or realloc if necessary + else { + x->gbuf = (float *) realloc(x->gbuf, x->buflen * sizeof(float)); + x->grainenv = (float *) realloc(x->grainenv, x->grainsamps * sizeof(float)); + } + for(i = 0; i < x->grainsamps; i++ ){ + x->grainenv[i] = .5 + (-.5 * cos(TWOPI * ((float)i/(float)x->grainsamps))); + } + x->gpt1 = 0; + x->gpt2 = x->grainsamps / 3.; + x->gpt3 = 2. * x->grainsamps / 3.; + x->phs1 = 0; + x->phs2 = x->grainsamps / 3. ; + x->phs3 = 2. * x->grainsamps / 3. ; + x->curdel = 0; +} + + +t_int *granola_perform(t_int *w) +{ + float outsamp ; + int iphs_a, iphs_b; + float frac; + + + /****/ + t_granola *x = (t_granola *) (w[1]); + t_float *in = (t_float *)(w[2]); + t_float *increment = (t_float *)(w[3]); + t_float *out = (t_float *)(w[4]); + int n = (int)(w[5]); + + long gpt1 = x->gpt1; + long gpt2 = x->gpt2; + long gpt3 = x->gpt3; + float phs1 = x->phs1; + float phs2 = x->phs2; + float phs3 = x->phs3; + long curdel = x->curdel; + long buflen = x->buflen; + long grainsamps = x->grainsamps; + float *grainenv = x->grainenv; + float *gbuf = x->gbuf; + float incr = x->incr; + + if( x->mute_me ) { + while( n-- ){ + *out++ = 0.0; + } + return (w+6); + } + + while (n--) { + + x->incr = *increment++; + + if( x->incr <= 0. ) { + x->incr = .5 ; + } + + if( curdel >= buflen ){ + curdel = 0 ; + } + gbuf[ curdel ] = *in++; + + // grain 1 + iphs_a = floor( phs1 ); + iphs_b = iphs_a + 1; + + frac = phs1 - iphs_a; + while( iphs_a >= buflen ) { + iphs_a -= buflen; + } + while( iphs_b >= buflen ) { + iphs_b -= buflen; + } + outsamp = (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt1++ ]; + + if( gpt1 >= grainsamps ) { + + gpt1 = 0; + phs1 = curdel; + } + phs1 += incr; + while( phs1 >= buflen ) { + phs1 -= buflen; + } + + // now add second grain + + + iphs_a = floor( phs2 ); + + iphs_b = iphs_a + 1; + + frac = phs2 - iphs_a; + + + while( iphs_a >= buflen ) { + iphs_a -= buflen; + } + while( iphs_b >= buflen ) { + iphs_b -= buflen; + } + outsamp += (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt2++ ]; + if( gpt2 >= grainsamps ) { + gpt2 = 0; + phs2 = curdel ; + } + phs2 += incr ; + while( phs2 >= buflen ) { + phs2 -= buflen ; + } + + // now add third grain + + iphs_a = floor( phs3 ); + iphs_b = iphs_a + 1; + + frac = phs3 - iphs_a; + + while( iphs_a >= buflen ) { + iphs_a -= buflen; + } + while( iphs_b >= buflen ) { + iphs_b -= buflen; + } + outsamp += (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt3++ ]; + if( gpt3 >= grainsamps ) { + gpt3 = 0; + phs3 = curdel ; + } + phs3 += incr ; + while( phs3 >= buflen ) { + phs3 -= buflen ; + } + + + ++curdel; + + *out++ = outsamp; + /* output may well need to attenuated */ + } + x->phs1 = phs1; + x->phs2 = phs2; + x->phs3 = phs3; + x->gpt1 = gpt1; + x->gpt2 = gpt2; + x->gpt3 = gpt3; + x->curdel = curdel; + return (w+6); + +} + +void granola_dsp(t_granola *x, t_signal **sp) +{ + + dsp_add(granola_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/granulesf~-help.pd b/externals/lyonpotpourri/granulesf~-help.pd new file mode 100755 index 000000000..cf122987f --- /dev/null +++ b/externals/lyonpotpourri/granulesf~-help.pd @@ -0,0 +1,4519 @@ +#N canvas 660 123 698 511 10; +#X obj 25 302 granulesf~ gsf_wavetable gsf_window; +#N canvas 0 22 450 300 (subpatch) 0; +#X array gsf_window 32768 float 3; +#A 0 0 9.19179e-09 3.67671e-08 8.27261e-08 1.47069e-07 2.29795e-07 +3.30904e-07 4.50397e-07 5.88274e-07 7.44534e-07 9.19178e-07 1.11221e-06 +1.32362e-06 1.55341e-06 1.80159e-06 2.06815e-06 2.3531e-06 2.65642e-06 +2.97814e-06 3.31823e-06 3.67671e-06 4.05357e-06 4.44882e-06 4.86245e-06 +5.29446e-06 5.74485e-06 6.21363e-06 6.7008e-06 7.20634e-06 7.73027e-06 +8.27258e-06 8.83328e-06 9.41236e-06 1.00098e-05 1.06257e-05 1.12599e-05 +1.19125e-05 1.25835e-05 1.32729e-05 1.39806e-05 1.47068e-05 1.54513e-05 +1.62142e-05 1.69955e-05 1.77952e-05 1.86132e-05 1.94497e-05 2.03045e-05 +2.11777e-05 2.20693e-05 2.29793e-05 2.39076e-05 2.48544e-05 2.58195e-05 +2.6803e-05 2.78049e-05 2.88252e-05 2.98638e-05 3.09208e-05 3.19963e-05 +3.30901e-05 3.42022e-05 3.53328e-05 3.64818e-05 3.76491e-05 3.88348e-05 +4.00389e-05 4.12614e-05 4.25022e-05 4.37615e-05 4.50391e-05 4.63351e-05 +4.76495e-05 4.89822e-05 5.03334e-05 5.17029e-05 5.30908e-05 5.44971e-05 +5.59218e-05 5.73648e-05 5.88263e-05 6.03061e-05 6.18043e-05 6.33209e-05 +6.48558e-05 6.64092e-05 6.79809e-05 6.9571e-05 7.11795e-05 7.28064e-05 +7.44516e-05 7.61152e-05 7.77973e-05 7.94976e-05 8.12164e-05 8.29536e-05 +8.47091e-05 8.6483e-05 8.82753e-05 9.0086e-05 9.1915e-05 9.37625e-05 +9.56283e-05 9.75125e-05 9.94151e-05 0.000101336 0.000103275 0.000105233 +0.000107209 0.000109204 0.000111216 0.000113248 0.000115297 0.000117365 +0.000119452 0.000121556 0.00012368 0.000125821 0.000127981 0.000130159 +0.000132356 0.000134571 0.000136804 0.000139056 0.000141326 0.000143615 +0.000145922 0.000148247 0.000150591 0.000152953 0.000155333 0.000157732 +0.000160149 0.000162585 0.000165039 0.000167511 0.000170002 0.000172511 +0.000175038 0.000177584 0.000180148 0.000182731 0.000185332 0.000187951 +0.000190589 0.000193245 0.000195919 0.000198612 0.000201323 0.000204053 +0.000206801 0.000209567 0.000212352 0.000215155 0.000217977 0.000220816 +0.000223675 0.000226551 0.000229446 0.00023236 0.000235291 0.000238241 +0.00024121 0.000244197 0.000247202 0.000250225 0.000253267 0.000256328 +0.000259407 0.000262504 0.000265619 0.000268753 0.000271905 0.000275076 +0.000278265 0.000281472 0.000284698 0.000287942 0.000291204 0.000294485 +0.000297784 0.000301102 0.000304438 0.000307792 0.000311165 0.000314556 +0.000317965 0.000321393 0.000324839 0.000328304 0.000331787 0.000335288 +0.000338808 0.000342346 0.000345902 0.000349477 0.00035307 0.000356682 +0.000360311 0.00036396 0.000367626 0.000371311 0.000375015 0.000378736 +0.000382477 0.000386235 0.000390012 0.000393807 0.000397621 0.000401453 +0.000405303 0.000409172 0.000413059 0.000416964 0.000420888 0.00042483 +0.000428791 0.00043277 0.000436767 0.000440782 0.000444816 0.000448869 +0.00045294 0.000457029 0.000461136 0.000465262 0.000469406 0.000473569 +0.00047775 0.000481949 0.000486167 0.000490403 0.000494657 0.00049893 +0.000503221 0.00050753 0.000511858 0.000516205 0.000520569 0.000524952 +0.000529353 0.000533773 0.000538211 0.000542668 0.000547142 0.000551635 +0.000556147 0.000560677 0.000565225 0.000569792 0.000574377 0.00057898 +0.000583602 0.000588242 0.0005929 0.000597577 0.000602272 0.000606985 +0.000611717 0.000616467 0.000621236 0.000626023 0.000630828 0.000635652 +0.000640494 0.000645354 0.000650233 0.00065513 0.000660046 0.000664979 +0.000669931 0.000674902 0.000679891 0.000684898 0.000689924 0.000694968 +0.00070003 0.000705111 0.00071021 0.000715327 0.000720463 0.000725617 +0.000730789 0.00073598 0.000741189 0.000746417 0.000751663 0.000756927 +0.00076221 0.000767511 0.00077283 0.000778168 0.000783524 0.000788898 +0.000794291 0.000799702 0.000805131 0.000810579 0.000816045 0.00082153 +0.000827033 0.000832554 0.000838093 0.000843651 0.000849228 0.000854822 +0.000860435 0.000866066 0.000871716 0.000877384 0.000883071 0.000888775 +0.000894498 0.00090024 0.000906 0.000911778 0.000917574 0.000923389 +0.000929222 0.000935074 0.000940944 0.000946832 0.000952738 0.000958663 +0.000964607 0.000970568 0.000976548 0.000982546 0.000988563 0.000994598 +0.00100065 0.00100672 0.00101281 0.00101892 0.00102505 0.00103119 0.00103736 +0.00104354 0.00104974 0.00105596 0.00106219 0.00106845 0.00107472 0.00108101 +0.00108732 0.00109365 0.0011 0.00110637 0.00111275 0.00111915 0.00112557 +0.00113201 0.00113847 0.00114494 0.00115144 0.00115795 0.00116448 0.00117103 +0.00117759 0.00118418 0.00119078 0.0011974 0.00120404 0.0012107 0.00121738 +0.00122408 0.00123079 0.00123752 0.00124427 0.00125104 0.00125783 0.00126463 +0.00127146 0.0012783 0.00128516 0.00129204 0.00129894 0.00130585 0.00131278 +0.00131974 0.00132671 0.0013337 0.0013407 0.00134773 0.00135477 0.00136183 +0.00136891 0.00137601 0.00138313 0.00139027 0.00139742 0.00140459 0.00141178 +0.00141899 0.00142622 0.00143346 0.00144073 0.00144801 0.00145531 0.00146263 +0.00146996 0.00147732 0.00148469 0.00149209 0.0014995 0.00150693 0.00151437 +0.00152184 0.00152932 0.00153682 0.00154434 0.00155188 0.00155944 0.00156701 +0.00157461 0.00158222 0.00158985 0.0015975 0.00160517 0.00161285 0.00162055 +0.00162828 0.00163602 0.00164378 0.00165155 0.00165935 0.00166716 0.00167499 +0.00168284 0.00169071 0.0016986 0.0017065 0.00171443 0.00172237 0.00173033 +0.00173831 0.0017463 0.00175432 0.00176235 0.0017704 0.00177847 0.00178656 +0.00179467 0.00180279 0.00181094 0.0018191 0.00182728 0.00183548 0.00184369 +0.00185193 0.00186018 0.00186845 0.00187674 0.00188505 0.00189338 0.00190172 +0.00191009 0.00191847 0.00192687 0.00193528 0.00194372 0.00195218 0.00196065 +0.00196914 0.00197765 0.00198618 0.00199472 0.00200329 0.00201187 0.00202047 +0.00202909 0.00203773 0.00204639 0.00205506 0.00206375 0.00207246 0.00208119 +0.00208994 0.00209871 0.00210749 0.00211629 0.00212511 0.00213395 0.00214281 +0.00215169 0.00216058 0.00216949 0.00217842 0.00218737 0.00219634 0.00220532 +0.00221433 0.00222335 0.00223239 0.00224145 0.00225053 0.00225962 0.00226874 +0.00227787 0.00228702 0.00229619 0.00230537 0.00231458 0.0023238 0.00233304 +0.0023423 0.00235158 0.00236088 0.00237019 0.00237953 0.00238888 0.00239825 +0.00240764 0.00241704 0.00242647 0.00243591 0.00244537 0.00245485 0.00246435 +0.00247387 0.0024834 0.00249295 0.00250252 0.00251211 0.00252172 0.00253135 +0.00254099 0.00255065 0.00256033 0.00257003 0.00257975 0.00258949 0.00259924 +0.00260901 0.0026188 0.00262861 0.00263844 0.00264828 0.00265815 0.00266803 +0.00267793 0.00268785 0.00269779 0.00270774 0.00271771 0.00272771 0.00273772 +0.00274774 0.00275779 0.00276786 0.00277794 0.00278804 0.00279816 0.0028083 +0.00281845 0.00282863 0.00283882 0.00284903 0.00285926 0.00286951 0.00287978 +0.00289006 0.00290036 0.00291068 0.00292102 0.00293138 0.00294175 0.00295215 +0.00296256 0.00297299 0.00298344 0.00299391 0.00300439 0.00301489 0.00302542 +0.00303596 0.00304651 0.00305709 0.00306769 0.0030783 0.00308893 0.00309958 +0.00311025 0.00312093 0.00313164 0.00314236 0.0031531 0.00316386 0.00317464 +0.00318544 0.00319625 0.00320708 0.00321793 0.0032288 0.00323969 0.00325059 +0.00326152 0.00327246 0.00328342 0.0032944 0.00330539 0.00331641 0.00332744 +0.00333849 0.00334956 0.00336065 0.00337176 0.00338288 0.00339403 0.00340519 +0.00341637 0.00342756 0.00343878 0.00345001 0.00346127 0.00347254 0.00348382 +0.00349513 0.00350646 0.0035178 0.00352916 0.00354054 0.00355194 0.00356336 +0.00357479 0.00358625 0.00359772 0.00360921 0.00362071 0.00363224 0.00364379 +0.00365535 0.00366693 0.00367853 0.00369015 0.00370178 0.00371343 0.00372511 +0.0037368 0.00374851 0.00376023 0.00377198 0.00378374 0.00379552 0.00380732 +0.00381914 0.00383098 0.00384283 0.0038547 0.0038666 0.0038785 0.00389043 +0.00390238 0.00391434 0.00392632 0.00393832 0.00395034 0.00396238 0.00397444 +0.00398651 0.0039986 0.00401071 0.00402284 0.00403499 0.00404715 0.00405933 +0.00407153 0.00408375 0.00409599 0.00410825 0.00412052 0.00413281 0.00414512 +0.00415745 0.0041698 0.00418216 0.00419455 0.00420695 0.00421937 0.00423181 +0.00424426 0.00425674 0.00426923 0.00428174 0.00429427 0.00430682 0.00431938 +0.00433197 0.00434457 0.00435719 0.00436983 0.00438249 0.00439516 0.00440785 +0.00442057 0.0044333 0.00444604 0.00445881 0.00447159 0.0044844 0.00449722 +0.00451006 0.00452291 0.00453579 0.00454868 0.00456159 0.00457452 0.00458747 +0.00460044 0.00461342 0.00462643 0.00463945 0.00465249 0.00466554 0.00467862 +0.00469171 0.00470483 0.00471796 0.00473111 0.00474427 0.00475746 0.00477066 +0.00478388 0.00479712 0.00481038 0.00482366 0.00483695 0.00485026 0.00486359 +0.00487694 0.00489031 0.0049037 0.0049171 0.00493052 0.00494396 0.00495742 +0.00497089 0.00498439 0.0049979 0.00501143 0.00502498 0.00503855 0.00505214 +0.00506574 0.00507936 0.005093 0.00510666 0.00512034 0.00513403 0.00514774 +0.00516147 0.00517522 0.00518899 0.00520278 0.00521658 0.0052304 0.00524424 +0.0052581 0.00527198 0.00528587 0.00529979 0.00531372 0.00532767 0.00534163 +0.00535562 0.00536962 0.00538365 0.00539769 0.00541175 0.00542582 0.00543992 +0.00545403 0.00546816 0.00548231 0.00549648 0.00551066 0.00552487 0.00553909 +0.00555333 0.00556759 0.00558187 0.00559616 0.00561047 0.0056248 0.00563915 +0.00565352 0.00566791 0.00568231 0.00569673 0.00571117 0.00572563 0.00574011 +0.0057546 0.00576912 0.00578365 0.0057982 0.00581276 0.00582735 0.00584195 +0.00585658 0.00587122 0.00588587 0.00590055 0.00591525 0.00592996 0.00594469 +0.00595944 0.00597421 0.00598899 0.0060038 0.00601862 0.00603346 0.00604832 +0.00606319 0.00607809 0.006093 0.00610793 0.00612288 0.00613785 0.00615283 +0.00616783 0.00618286 0.0061979 0.00621295 0.00622803 0.00624312 0.00625824 +0.00627337 0.00628851 0.00630368 0.00631887 0.00633407 0.00634929 0.00636453 +0.00637979 0.00639506 0.00641036 0.00642567 0.006441 0.00645635 0.00647171 +0.0064871 0.0065025 0.00651792 0.00653336 0.00654882 0.00656429 0.00657979 +0.0065953 0.00661083 0.00662638 0.00664194 0.00665753 0.00667313 0.00668875 +0.00670439 0.00672004 0.00673572 0.00675141 0.00676712 0.00678285 0.0067986 +0.00681437 0.00683015 0.00684595 0.00686177 0.00687761 0.00689347 0.00690934 +0.00692523 0.00694114 0.00695707 0.00697302 0.00698898 0.00700497 0.00702097 +0.00703699 0.00705302 0.00706908 0.00708515 0.00710125 0.00711736 0.00713348 +0.00714963 0.00716579 0.00718198 0.00719818 0.0072144 0.00723063 0.00724689 +0.00726316 0.00727945 0.00729576 0.00731209 0.00732843 0.0073448 0.00736118 +0.00737758 0.007394 0.00741043 0.00742689 0.00744336 0.00745985 0.00747636 +0.00749288 0.00750943 0.00752599 0.00754257 0.00755917 0.00757579 0.00759242 +0.00760908 0.00762575 0.00764244 0.00765915 0.00767587 0.00769262 0.00770938 +0.00772616 0.00774296 0.00775977 0.00777661 0.00779346 0.00781033 0.00782722 +0.00784412 0.00786105 0.00787799 0.00789495 0.00791193 0.00792893 0.00794595 +0.00796298 0.00798003 0.0079971 0.00801419 0.00803129 0.00804842 0.00806556 +0.00808272 0.0080999 0.00811709 0.00813431 0.00815154 0.00816879 0.00818606 +0.00820335 0.00822065 0.00823797 0.00825531 0.00827267 0.00829005 0.00830744 +0.00832486 0.00834229 0.00835974 0.00837721 0.00839469 0.0084122 0.00842972 +0.00844726 0.00846481 0.00848239 0.00849998 0.0085176 0.00853523 0.00855287 +0.00857054 0.00858822 0.00860593 0.00862365 0.00864139 0.00865914 0.00867692 +0.00869471 0.00871252 0.00873035 0.0087482 0.00876606 0.00878394 0.00880184 +0.00881976 0.0088377 0.00885566 0.00887363 0.00889162 0.00890963 0.00892766 +0.0089457 0.00896377 0.00898185 0.00899995 0.00901807 0.0090362 0.00905436 +0.00907253 0.00909072 0.00910892 0.00912715 0.00914539; +#A 1000 0.00916366 0.00918194 0.00920023 0.00921855 0.00923689 0.00925524 +0.00927361 0.009292 0.0093104 0.00932883 0.00934727 0.00936573 0.00938421 +0.00940271 0.00942122 0.00943975 0.0094583 0.00947687 0.00949546 0.00951406 +0.00953269 0.00955133 0.00956999 0.00958866 0.00960736 0.00962607 0.0096448 +0.00966355 0.00968232 0.00970111 0.00971991 0.00973873 0.00975757 0.00977643 +0.0097953 0.0098142 0.00983311 0.00985204 0.00987098 0.00988995 0.00990893 +0.00992793 0.00994695 0.00996599 0.00998505 0.0100041 0.0100232 0.0100423 +0.0100614 0.0100806 0.0100998 0.0101189 0.0101381 0.0101574 0.0101766 +0.0101958 0.0102151 0.0102344 0.0102537 0.010273 0.0102924 0.0103117 +0.0103311 0.0103505 0.0103699 0.0103894 0.0104088 0.0104283 0.0104478 +0.0104673 0.0104868 0.0105064 0.0105259 0.0105455 0.0105651 0.0105847 +0.0106043 0.010624 0.0106436 0.0106633 0.010683 0.0107028 0.0107225 +0.0107423 0.010762 0.0107818 0.0108016 0.0108215 0.0108413 0.0108612 +0.0108811 0.010901 0.0109209 0.0109408 0.0109608 0.0109808 0.0110007 +0.0110208 0.0110408 0.0110608 0.0110809 0.011101 0.0111211 0.0111412 +0.0111613 0.0111815 0.0112016 0.0112218 0.011242 0.0112623 0.0112825 +0.0113028 0.011323 0.0113433 0.0113637 0.011384 0.0114043 0.0114247 +0.0114451 0.0114655 0.0114859 0.0115064 0.0115268 0.0115473 0.0115678 +0.0115883 0.0116088 0.0116294 0.01165 0.0116705 0.0116911 0.0117118 +0.0117324 0.0117531 0.0117737 0.0117944 0.0118151 0.0118359 0.0118566 +0.0118774 0.0118982 0.011919 0.0119398 0.0119606 0.0119815 0.0120023 +0.0120232 0.0120441 0.0120651 0.012086 0.012107 0.0121279 0.0121489 +0.0121699 0.012191 0.012212 0.0122331 0.0122542 0.0122753 0.0122964 +0.0123176 0.0123387 0.0123599 0.0123811 0.0124023 0.0124235 0.0124448 +0.012466 0.0124873 0.0125086 0.0125299 0.0125513 0.0125726 0.012594 +0.0126154 0.0126368 0.0126582 0.0126797 0.0127012 0.0127226 0.0127441 +0.0127657 0.0127872 0.0128087 0.0128303 0.0128519 0.0128735 0.0128951 +0.0129168 0.0129384 0.0129601 0.0129818 0.0130035 0.0130253 0.013047 +0.0130688 0.0130906 0.0131124 0.0131342 0.013156 0.0131779 0.0131998 +0.0132216 0.0132436 0.0132655 0.0132874 0.0133094 0.0133314 0.0133534 +0.0133754 0.0133974 0.0134195 0.0134416 0.0134636 0.0134858 0.0135079 +0.01353 0.0135522 0.0135744 0.0135966 0.0136188 0.013641 0.0136633 +0.0136855 0.0137078 0.0137301 0.0137524 0.0137748 0.0137971 0.0138195 +0.0138419 0.0138643 0.0138868 0.0139092 0.0139317 0.0139541 0.0139766 +0.0139992 0.0140217 0.0140443 0.0140668 0.0140894 0.014112 0.0141347 +0.0141573 0.01418 0.0142026 0.0142253 0.0142481 0.0142708 0.0142935 +0.0143163 0.0143391 0.0143619 0.0143847 0.0144076 0.0144304 0.0144533 +0.0144762 0.0144991 0.014522 0.014545 0.0145679 0.0145909 0.0146139 +0.0146369 0.01466 0.014683 0.0147061 0.0147292 0.0147523 0.0147754 +0.0147986 0.0148217 0.0148449 0.0148681 0.0148913 0.0149146 0.0149378 +0.0149611 0.0149844 0.0150077 0.015031 0.0150543 0.0150777 0.0151011 +0.0151245 0.0151479 0.0151713 0.0151948 0.0152182 0.0152417 0.0152652 +0.0152887 0.0153123 0.0153358 0.0153594 0.015383 0.0154066 0.0154302 +0.0154538 0.0154775 0.0155012 0.0155249 0.0155486 0.0155723 0.0155961 +0.0156198 0.0156436 0.0156674 0.0156913 0.0157151 0.015739 0.0157628 +0.0157867 0.0158106 0.0158346 0.0158585 0.0158825 0.0159064 0.0159304 +0.0159545 0.0159785 0.0160026 0.0160266 0.0160507 0.0160748 0.0160989 +0.0161231 0.0161472 0.0161714 0.0161956 0.0162198 0.0162441 0.0162683 +0.0162926 0.0163169 0.0163412 0.0163655 0.0163898 0.0164142 0.0164385 +0.0164629 0.0164873 0.0165118 0.0165362 0.0165607 0.0165851 0.0166096 +0.0166342 0.0166587 0.0166832 0.0167078 0.0167324 0.016757 0.0167816 +0.0168063 0.0168309 0.0168556 0.0168803 0.016905 0.0169297 0.0169545 +0.0169792 0.017004 0.0170288 0.0170536 0.0170785 0.0171033 0.0171282 +0.0171531 0.017178 0.0172029 0.0172278 0.0172528 0.0172778 0.0173028 +0.0173278 0.0173528 0.0173779 0.0174029 0.017428 0.0174531 0.0174782 +0.0175034 0.0175285 0.0175537 0.0175789 0.0176041 0.0176293 0.0176546 +0.0176798 0.0177051 0.0177304 0.0177557 0.017781 0.0178064 0.0178318 +0.0178571 0.0178825 0.017908 0.0179334 0.0179589 0.0179843 0.0180098 +0.0180353 0.0180609 0.0180864 0.018112 0.0181375 0.0181631 0.0181888 +0.0182144 0.01824 0.0182657 0.0182914 0.0183171 0.0183428 0.0183686 +0.0183943 0.0184201 0.0184459 0.0184717 0.0184975 0.0185234 0.0185492 +0.0185751 0.018601 0.0186269 0.0186529 0.0186788 0.0187048 0.0187308 +0.0187568 0.0187828 0.0188088 0.0188349 0.018861 0.0188871 0.0189132 +0.0189393 0.0189654 0.0189916 0.0190178 0.019044 0.0190702 0.0190964 +0.0191227 0.019149 0.0191753 0.0192016 0.0192279 0.0192542 0.0192806 +0.019307 0.0193333 0.0193598 0.0193862 0.0194126 0.0194391 0.0194656 +0.0194921 0.0195186 0.0195451 0.0195717 0.0195983 0.0196248 0.0196514 +0.0196781 0.0197047 0.0197314 0.019758 0.0197847 0.0198115 0.0198382 +0.0198649 0.0198917 0.0199185 0.0199453 0.0199721 0.0199989 0.0200258 +0.0200527 0.0200795 0.0201064 0.0201334 0.0201603 0.0201873 0.0202142 +0.0202412 0.0202682 0.0202953 0.0203223 0.0203494 0.0203765 0.0204036 +0.0204307 0.0204578 0.020485 0.0205121 0.0205393 0.0205665 0.0205938 +0.020621 0.0206483 0.0206755 0.0207028 0.0207301 0.0207575 0.0207848 +0.0208122 0.0208396 0.020867 0.0208944 0.0209218 0.0209493 0.0209767 +0.0210042 0.0210317 0.0210593 0.0210868 0.0211144 0.0211419 0.0211695 +0.0211971 0.0212248 0.0212524 0.0212801 0.0213077 0.0213354 0.0213632 +0.0213909 0.0214186 0.0214464 0.0214742 0.021502 0.0215298 0.0215577 +0.0215855 0.0216134 0.0216413 0.0216692 0.0216971 0.0217251 0.021753 +0.021781 0.021809 0.021837 0.0218651 0.0218931 0.0219212 0.0219493 +0.0219774 0.0220055 0.0220336 0.0220618 0.02209 0.0221182 0.0221464 +0.0221746 0.0222028 0.0222311 0.0222594 0.0222877 0.022316 0.0223443 +0.0223727 0.022401 0.0224294 0.0224578 0.0224862 0.0225147 0.0225431 +0.0225716 0.0226001 0.0226286 0.0226571 0.0226857 0.0227142 0.0227428 +0.0227714 0.0228 0.0228286 0.0228573 0.022886 0.0229146 0.0229433 0.0229721 +0.0230008 0.0230295 0.0230583 0.0230871 0.0231159 0.0231447 0.0231736 +0.0232024 0.0232313 0.0232602 0.0232891 0.023318 0.023347 0.0233759 +0.0234049 0.0234339 0.0234629 0.023492 0.023521 0.0235501 0.0235792 +0.0236083 0.0236374 0.0236665 0.0236957 0.0237249 0.0237541 0.0237833 +0.0238125 0.0238417 0.023871 0.0239003 0.0239296 0.0239589 0.0239882 +0.0240176 0.0240469 0.0240763 0.0241057 0.0241351 0.0241646 0.024194 +0.0242235 0.024253 0.0242825 0.024312 0.0243416 0.0243711 0.0244007 +0.0244303 0.0244599 0.0244895 0.0245192 0.0245488 0.0245785 0.0246082 +0.0246379 0.0246677 0.0246974 0.0247272 0.024757 0.0247868 0.0248166 +0.0248464 0.0248763 0.0249062 0.024936 0.024966 0.0249959 0.0250258 +0.0250558 0.0250858 0.0251158 0.0251458 0.0251758 0.0252058 0.0252359 +0.025266 0.0252961 0.0253262 0.0253563 0.0253865 0.0254167 0.0254469 +0.0254771 0.0255073 0.0255375 0.0255678 0.0255981 0.0256283 0.0256587 +0.025689 0.0257193 0.0257497 0.0257801 0.0258105 0.0258409 0.0258713 +0.0259018 0.0259322 0.0259627 0.0259932 0.0260237 0.0260543 0.0260848 +0.0261154 0.026146 0.0261766 0.0262072 0.0262378 0.0262685 0.0262992 +0.0263299 0.0263606 0.0263913 0.0264221 0.0264528 0.0264836 0.0265144 +0.0265452 0.026576 0.0266069 0.0266378 0.0266686 0.0266995 0.0267305 +0.0267614 0.0267924 0.0268233 0.0268543 0.0268853 0.0269163 0.0269474 +0.0269784 0.0270095 0.0270406 0.0270717 0.0271028 0.027134 0.0271652 +0.0271963 0.0272275 0.0272588 0.02729 0.0273212 0.0273525 0.0273838 +0.0274151 0.0274464 0.0274777 0.0275091 0.0275405 0.0275719 0.0276033 +0.0276347 0.0276661 0.0276976 0.0277291 0.0277606 0.0277921 0.0278236 +0.0278551 0.0278867 0.0279183 0.0279499 0.0279815 0.0280131 0.0280448 +0.0280764 0.0281081 0.0281398 0.0281715 0.0282033 0.028235 0.0282668 +0.0282986 0.0283304 0.0283622 0.028394 0.0284259 0.0284578 0.0284897 +0.0285216 0.0285535 0.0285855 0.0286174 0.0286494 0.0286814 0.0287134 +0.0287454 0.0287775 0.0288095 0.0288416 0.0288737 0.0289058 0.028938 +0.0289701 0.0290023 0.0290345 0.0290667 0.0290989 0.0291311 0.0291634 +0.0291957 0.029228 0.0292603 0.0292926 0.0293249 0.0293573 0.0293897 +0.0294221 0.0294545 0.0294869 0.0295194 0.0295518 0.0295843 0.0296168 +0.0296493 0.0296818 0.0297144 0.029747 0.0297795 0.0298122 0.0298448 +0.0298774 0.0299101 0.0299427 0.0299754 0.0300081 0.0300408 0.0300736 +0.0301063 0.0301391 0.0301719 0.0302047 0.0302375 0.0302704 0.0303032 +0.0303361 0.030369 0.0304019 0.0304349 0.0304678 0.0305008 0.0305338 +0.0305668 0.0305998 0.0306328 0.0306659 0.0306989 0.030732 0.0307651 +0.0307982 0.0308314 0.0308645 0.0308977 0.0309309 0.0309641 0.0309973 +0.0310306 0.0310638 0.0310971 0.0311304 0.0311637 0.031197 0.0312304 +0.0312637 0.0312971 0.0313305 0.0313639 0.0313973 0.0314308 0.0314642 +0.0314977 0.0315312 0.0315647 0.0315983 0.0316318 0.0316654 0.031699 +0.0317326 0.0317662 0.0317998 0.0318335 0.0318672 0.0319009 0.0319346 +0.0319683 0.032002 0.0320358 0.0320696 0.0321033 0.0321372 0.032171 +0.0322048 0.0322387 0.0322726 0.0323065 0.0323404 0.0323743 0.0324082 +0.0324422 0.0324762 0.0325102 0.0325442 0.0325782 0.0326123 0.0326464 +0.0326804 0.0327145 0.0327487 0.0327828 0.0328169 0.0328511 0.0328853 +0.0329195 0.0329537 0.032988 0.0330222 0.0330565 0.0330908 0.0331251 +0.0331594 0.0331938 0.0332281 0.0332625 0.0332969 0.0333313 0.0333657 +0.0334002 0.0334346 0.0334691 0.0335036 0.0335381 0.0335726 0.0336072 +0.0336418 0.0336763 0.0337109 0.0337456 0.0337802 0.0338148 0.0338495 +0.0338842 0.0339189 0.0339536 0.0339883 0.0340231 0.0340579 0.0340927 +0.0341275 0.0341623 0.0341971 0.034232 0.0342668 0.0343017 0.0343366 +0.0343716 0.0344065 0.0344415 0.0344764 0.0345114 0.0345464 0.0345815 +0.0346165 0.0346516 0.0346867 0.0347218 0.0347569 0.034792 0.0348271 +0.0348623 0.0348975 0.0349327 0.0349679 0.0350031 0.0350384 0.0350736 +0.0351089 0.0351442 0.0351796 0.0352149 0.0352502 0.0352856 0.035321 +0.0353564 0.0353918 0.0354273 0.0354627 0.0354982 0.0355337 0.0355692 +0.0356047 0.0356402 0.0356758 0.0357114 0.035747 0.0357826 0.0358182 +0.0358538 0.0358895 0.0359252 0.0359609 0.0359966 0.0360323 0.036068 +0.0361038 0.0361396 0.0361754 0.0362112 0.036247 0.0362829; +#A 2000 0.0363187 0.0363546 0.0363905 0.0364264 0.0364624 0.0364983 +0.0365343 0.0365703 0.0366063 0.0366423 0.0366783 0.0367144 0.0367504 +0.0367865 0.0368226 0.0368587 0.0368949 0.036931 0.0369672 0.0370034 +0.0370396 0.0370758 0.0371121 0.0371483 0.0371846 0.0372209 0.0372572 +0.0372935 0.0373298 0.0373662 0.0374026 0.037439 0.0374754 0.0375118 +0.0375482 0.0375847 0.0376212 0.0376577 0.0376942 0.0377307 0.0377673 +0.0378038 0.0378404 0.037877 0.0379136 0.0379502 0.0379869 0.0380236 +0.0380602 0.0380969 0.0381336 0.0381704 0.0382071 0.0382439 0.0382807 +0.0383175 0.0383543 0.0383911 0.038428 0.0384648 0.0385017 0.0385386 +0.0385755 0.0386125 0.0386494 0.0386864 0.0387234 0.0387604 0.0387974 +0.0388345 0.0388715 0.0389086 0.0389457 0.0389828 0.0390199 0.039057 +0.0390942 0.0391314 0.0391686 0.0392058 0.039243 0.0392802 0.0393175 +0.0393548 0.039392 0.0394294 0.0394667 0.039504 0.0395414 0.0395788 +0.0396161 0.0396536 0.039691 0.0397284 0.0397659 0.0398034 0.0398409 +0.0398784 0.0399159 0.0399534 0.039991 0.0400286 0.0400662 0.0401038 +0.0401414 0.0401791 0.0402167 0.0402544 0.0402921 0.0403298 0.0403676 +0.0404053 0.0404431 0.0404809 0.0405187 0.0405565 0.0405943 0.0406322 +0.04067 0.0407079 0.0407458 0.0407837 0.0408217 0.0408596 0.0408976 +0.0409356 0.0409736 0.0410116 0.0410496 0.0410877 0.0411257 0.0411638 +0.0412019 0.04124 0.0412782 0.0413163 0.0413545 0.0413927 0.0414309 +0.0414691 0.0415074 0.0415456 0.0415839 0.0416222 0.0416605 0.0416988 +0.0417371 0.0417755 0.0418139 0.0418522 0.0418907 0.0419291 0.0419675 +0.042006 0.0420444 0.0420829 0.0421214 0.04216 0.0421985 0.0422371 +0.0422756 0.0423142 0.0423528 0.0423915 0.0424301 0.0424688 0.0425074 +0.0425461 0.0425848 0.0426236 0.0426623 0.0427011 0.0427398 0.0427786 +0.0428175 0.0428563 0.0428951 0.042934 0.0429729 0.0430118 0.0430507 +0.0430896 0.0431285 0.0431675 0.0432065 0.0432455 0.0432845 0.0433235 +0.0433626 0.0434016 0.0434407 0.0434798 0.0435189 0.043558 0.0435972 +0.0436363 0.0436755 0.0437147 0.0437539 0.0437932 0.0438324 0.0438717 +0.043911 0.0439502 0.0439896 0.0440289 0.0440682 0.0441076 0.044147 +0.0441864 0.0442258 0.0442652 0.0443047 0.0443441 0.0443836 0.0444231 +0.0444626 0.0445022 0.0445417 0.0445813 0.0446209 0.0446605 0.0447001 +0.0447397 0.0447794 0.044819 0.0448587 0.0448984 0.0449381 0.0449778 +0.0450176 0.0450574 0.0450971 0.0451369 0.0451768 0.0452166 0.0452564 +0.0452963 0.0453362 0.0453761 0.045416 0.0454559 0.0454959 0.0455359 +0.0455758 0.0456158 0.0456559 0.0456959 0.0457359 0.045776 0.0458161 +0.0458562 0.0458963 0.0459364 0.0459766 0.0460168 0.0460569 0.0460971 +0.0461374 0.0461776 0.0462178 0.0462581 0.0462984 0.0463387 0.046379 +0.0464193 0.0464597 0.0465001 0.0465404 0.0465808 0.0466213 0.0466617 +0.0467021 0.0467426 0.0467831 0.0468236 0.0468641 0.0469046 0.0469452 +0.0469858 0.0470264 0.047067 0.0471076 0.0471482 0.0471889 0.0472295 +0.0472702 0.0473109 0.0473516 0.0473924 0.0474331 0.0474739 0.0475147 +0.0475555 0.0475963 0.0476371 0.047678 0.0477188 0.0477597 0.0478006 +0.0478415 0.0478825 0.0479234 0.0479644 0.0480054 0.0480464 0.0480874 +0.0481284 0.0481695 0.0482105 0.0482516 0.0482927 0.0483338 0.0483749 +0.0484161 0.0484573 0.0484984 0.0485396 0.0485809 0.0486221 0.0486633 +0.0487046 0.0487459 0.0487872 0.0488285 0.0488698 0.0489112 0.0489525 +0.0489939 0.0490353 0.0490767 0.0491182 0.0491596 0.0492011 0.0492426 +0.0492841 0.0493256 0.0493671 0.0494087 0.0494502 0.0494918 0.0495334 +0.049575 0.0496166 0.0496583 0.0496999 0.0497416 0.0497833 0.049825 +0.0498668 0.0499085 0.0499503 0.0499921 0.0500338 0.0500757 0.0501175 +0.0501593 0.0502012 0.0502431 0.050285 0.0503269 0.0503688 0.0504108 +0.0504527 0.0504947 0.0505367 0.0505787 0.0506207 0.0506628 0.0507048 +0.0507469 0.050789 0.0508311 0.0508732 0.0509154 0.0509575 0.0509997 +0.0510419 0.0510841 0.0511263 0.0511686 0.0512108 0.0512531 0.0512954 +0.0513377 0.05138 0.0514224 0.0514647 0.0515071 0.0515495 0.0515919 +0.0516343 0.0516768 0.0517192 0.0517617 0.0518042 0.0518467 0.0518892 +0.0519318 0.0519743 0.0520169 0.0520595 0.0521021 0.0521447 0.0521873 +0.05223 0.0522727 0.0523153 0.052358 0.0524008 0.0524435 0.0524862 +0.052529 0.0525718 0.0526146 0.0526574 0.0527003 0.0527431 0.052786 +0.0528289 0.0528718 0.0529147 0.0529576 0.0530006 0.0530435 0.0530865 +0.0531295 0.0531725 0.0532156 0.0532586 0.0533017 0.0533448 0.0533879 +0.053431 0.0534741 0.0535172 0.0535604 0.0536036 0.0536468 0.05369 +0.0537332 0.0537765 0.0538197 0.053863 0.0539063 0.0539496 0.0539929 +0.0540363 0.0540796 0.054123 0.0541664 0.0542098 0.0542533 0.0542967 +0.0543402 0.0543836 0.0544271 0.0544706 0.0545142 0.0545577 0.0546012 +0.0546448 0.0546884 0.054732 0.0547756 0.0548193 0.0548629 0.0549066 +0.0549503 0.054994 0.0550377 0.0550815 0.0551252 0.055169 0.0552128 +0.0552566 0.0553004 0.0553442 0.0553881 0.0554319 0.0554758 0.0555197 +0.0555636 0.0556076 0.0556515 0.0556955 0.0557395 0.0557835 0.0558275 +0.0558715 0.0559156 0.0559596 0.0560037 0.0560478 0.0560919 0.056136 +0.0561802 0.0562243 0.0562685 0.0563127 0.0563569 0.0564012 0.0564454 +0.0564897 0.0565339 0.0565782 0.0566225 0.0566669 0.0567112 0.0567556 +0.0567999 0.0568443 0.0568887 0.0569332 0.0569776 0.0570221 0.0570665 +0.057111 0.0571555 0.0572 0.0572446 0.0572891 0.0573337 0.0573783 0.0574229 +0.0574675 0.0575121 0.0575568 0.0576015 0.0576461 0.0576908 0.0577355 +0.0577803 0.057825 0.0578698 0.0579146 0.0579594 0.0580042 0.058049 +0.0580939 0.0581387 0.0581836 0.0582285 0.0582734 0.0583183 0.0583633 +0.0584082 0.0584532 0.0584982 0.0585432 0.0585882 0.0586333 0.0586783 +0.0587234 0.0587685 0.0588136 0.0588587 0.0589039 0.058949 0.0589942 +0.0590394 0.0590846 0.0591298 0.059175 0.0592203 0.0592655 0.0593108 +0.0593561 0.0594014 0.0594468 0.0594921 0.0595375 0.0595829 0.0596283 +0.0596737 0.0597191 0.0597646 0.05981 0.0598555 0.059901 0.0599465 +0.059992 0.0600376 0.0600831 0.0601287 0.0601743 0.0602199 0.0602655 +0.0603112 0.0603568 0.0604025 0.0604482 0.0604939 0.0605396 0.0605853 +0.0606311 0.0606769 0.0607227 0.0607685 0.0608143 0.0608601 0.060906 +0.0609518 0.0609977 0.0610436 0.0610895 0.0611354 0.0611814 0.0612274 +0.0612733 0.0613193 0.0613653 0.0614114 0.0614574 0.0615035 0.0615495 +0.0615956 0.0616417 0.0616879 0.061734 0.0617802 0.0618263 0.0618725 +0.0619187 0.061965 0.0620112 0.0620574 0.0621037 0.06215 0.0621963 +0.0622426 0.0622889 0.0623353 0.0623817 0.062428 0.0624744 0.0625209 +0.0625673 0.0626137 0.0626602 0.0627067 0.0627532 0.0627997 0.0628462 +0.0628927 0.0629393 0.0629859 0.0630325 0.0630791 0.0631257 0.0631723 +0.063219 0.0632657 0.0633124 0.0633591 0.0634058 0.0634525 0.0634993 +0.063546 0.0635928 0.0636396 0.0636864 0.0637333 0.0637801 0.063827 +0.0638738 0.0639207 0.0639677 0.0640146 0.0640615 0.0641085 0.0641555 +0.0642025 0.0642495 0.0642965 0.0643435 0.0643906 0.0644377 0.0644847 +0.0645318 0.064579 0.0646261 0.0646733 0.0647204 0.0647676 0.0648148 +0.064862 0.0649093 0.0649565 0.0650038 0.065051 0.0650983 0.0651457 +0.065193 0.0652403 0.0652877 0.0653351 0.0653825 0.0654299 0.0654773 +0.0655247 0.0655722 0.0656197 0.0656671 0.0657146 0.0657622 0.0658097 +0.0658573 0.0659048 0.0659524 0.066 0.0660476 0.0660953 0.0661429 0.0661906 +0.0662382 0.0662859 0.0663337 0.0663814 0.0664291 0.0664769 0.0665247 +0.0665724 0.0666203 0.0666681 0.0667159 0.0667638 0.0668116 0.0668595 +0.0669074 0.0669553 0.0670033 0.0670512 0.0670992 0.0671472 0.0671952 +0.0672432 0.0672912 0.0673393 0.0673873 0.0674354 0.0674835 0.0675316 +0.0675797 0.0676279 0.067676 0.0677242 0.0677724 0.0678206 0.0678688 +0.067917 0.0679653 0.0680136 0.0680619 0.0681102 0.0681585 0.0682068 +0.0682551 0.0683035 0.0683519 0.0684003 0.0684487 0.0684971 0.0685456 +0.068594 0.0686425 0.068691 0.0687395 0.068788 0.0688366 0.0688851 +0.0689337 0.0689823 0.0690309 0.0690795 0.0691281 0.0691768 0.0692254 +0.0692741 0.0693228 0.0693715 0.0694202 0.069469 0.0695178 0.0695665 +0.0696153 0.0696641 0.069713 0.0697618 0.0698106 0.0698595 0.0699084 +0.0699573 0.0700062 0.0700552 0.0701041 0.0701531 0.0702021 0.070251 +0.0703001 0.0703491 0.0703981 0.0704472 0.0704963 0.0705454 0.0705945 +0.0706436 0.0706927 0.0707419 0.0707911 0.0708402 0.0708895 0.0709387 +0.0709879 0.0710372 0.0710864 0.0711357 0.071185 0.0712343 0.0712836 +0.071333 0.0713823 0.0714317 0.0714811 0.0715305 0.0715799 0.0716294 +0.0716788 0.0717283 0.0717778 0.0718273 0.0718768 0.0719263 0.0719759 +0.0720254 0.072075 0.0721246 0.0721742 0.0722239 0.0722735 0.0723232 +0.0723728 0.0724225 0.0724722 0.072522 0.0725717 0.0726214 0.0726712 +0.072721 0.0727708 0.0728206 0.0728705 0.0729203 0.0729702 0.07302 +0.0730699 0.0731198 0.0731698 0.0732197 0.0732697 0.0733197 0.0733696 +0.0734196 0.0734697 0.0735197 0.0735698 0.0736198 0.0736699 0.07372 +0.0737701 0.0738202 0.0738704 0.0739205 0.0739707 0.0740209 0.0740711 +0.0741213 0.0741716 0.0742218 0.0742721 0.0743224 0.0743727 0.074423 +0.0744734 0.0745237 0.0745741 0.0746244 0.0746748 0.0747253 0.0747757 +0.0748261 0.0748766 0.0749271 0.0749776 0.0750281 0.0750786 0.0751291 +0.0751797 0.0752302 0.0752808 0.0753314 0.075382 0.0754327 0.0754833 +0.075534 0.0755847 0.0756353 0.0756861 0.0757368 0.0757875 0.0758383 +0.075889 0.0759398 0.0759906 0.0760414 0.0760923 0.0761431 0.076194 +0.0762449 0.0762958 0.0763467 0.0763976 0.0764486 0.0764995 0.0765505 +0.0766015 0.0766525 0.0767035 0.0767545 0.0768056 0.0768567 0.0769077 +0.0769588 0.0770099 0.0770611 0.0771122 0.0771634 0.0772146 0.0772657 +0.0773169 0.0773682 0.0774194 0.0774707 0.0775219 0.0775732 0.0776245 +0.0776758 0.0777272 0.0777785 0.0778299 0.0778812 0.0779326 0.077984 +0.0780355 0.0780869 0.0781384 0.0781898 0.0782413 0.0782928 0.0783443 +0.0783959 0.0784474 0.078499 0.0785506 0.0786022 0.0786538 0.0787054 +0.078757 0.0788087 0.0788604 0.0789121 0.0789638 0.0790155 0.0790672 +0.079119 0.0791707 0.0792225 0.0792743 0.0793261 0.0793779 0.0794298 +0.0794816 0.0795335 0.0795854 0.0796373 0.0796892 0.0797412 0.0797931 +0.0798451 0.0798971 0.0799491 0.0800011 0.0800531 0.0801051 0.0801572 +0.0802093 0.0802614 0.0803135 0.0803656 0.0804177; +#A 3000 0.0804699 0.080522 0.0805742 0.0806264 0.0806786 0.0807309 +0.0807831 0.0808354 0.0808876 0.0809399 0.0809922 0.0810446 0.0810969 +0.0811493 0.0812016 0.081254 0.0813064 0.0813588 0.0814112 0.0814637 +0.0815161 0.0815686 0.0816211 0.0816736 0.0817261 0.0817787 0.0818312 +0.0818838 0.0819364 0.081989 0.0820416 0.0820942 0.0821469 0.0821995 +0.0822522 0.0823049 0.0823576 0.0824103 0.082463 0.0825158 0.0825686 +0.0826213 0.0826741 0.082727 0.0827798 0.0828326 0.0828855 0.0829384 +0.0829912 0.0830442 0.0830971 0.08315 0.083203 0.0832559 0.0833089 +0.0833619 0.0834149 0.0834679 0.083521 0.083574 0.0836271 0.0836802 +0.0837333 0.0837864 0.0838396 0.0838927 0.0839459 0.0839991 0.0840523 +0.0841055 0.0841587 0.0842119 0.0842652 0.0843185 0.0843718 0.0844251 +0.0844784 0.0845317 0.0845851 0.0846384 0.0846918 0.0847452 0.0847986 +0.084852 0.0849055 0.0849589 0.0850124 0.0850659 0.0851194 0.0851729 +0.0852264 0.08528 0.0853335 0.0853871 0.0854407 0.0854943 0.0855479 +0.0856016 0.0856552 0.0857089 0.0857626 0.0858163 0.08587 0.0859237 +0.0859775 0.0860312 0.086085 0.0861388 0.0861926 0.0862464 0.0863003 +0.0863541 0.086408 0.0864619 0.0865158 0.0865697 0.0866236 0.0866776 +0.0867315 0.0867855 0.0868395 0.0868935 0.0869475 0.0870015 0.0870556 +0.0871096 0.0871637 0.0872178 0.0872719 0.087326 0.0873802 0.0874343 +0.0874885 0.0875427 0.0875969 0.0876511 0.0877054 0.0877596 0.0878139 +0.0878681 0.0879224 0.0879767 0.0880311 0.0880854 0.0881397 0.0881941 +0.0882485 0.0883029 0.0883573 0.0884117 0.0884662 0.0885206 0.0885751 +0.0886296 0.0886841 0.0887386 0.0887932 0.0888477 0.0889023 0.0889568 +0.0890114 0.0890661 0.0891207 0.0891753 0.08923 0.0892846 0.0893393 +0.089394 0.0894487 0.0895035 0.0895582 0.089613 0.0896678 0.0897225 +0.0897774 0.0898322 0.089887 0.0899419 0.0899967 0.0900516 0.0901065 +0.0901614 0.0902163 0.0902713 0.0903262 0.0903812 0.0904362 0.0904912 +0.0905462 0.0906013 0.0906563 0.0907114 0.0907664 0.0908215 0.0908766 +0.0909318 0.0909869 0.091042 0.0910972 0.0911524 0.0912076 0.0912628 +0.091318 0.0913733 0.0914285 0.0914838 0.0915391 0.0915944 0.0916497 +0.091705 0.0917604 0.0918158 0.0918711 0.0919265 0.0919819 0.0920374 +0.0920928 0.0921482 0.0922037 0.0922592 0.0923147 0.0923702 0.0924257 +0.0924813 0.0925368 0.0925924 0.092648 0.0927036 0.0927592 0.0928148 +0.0928705 0.0929262 0.0929818 0.0930375 0.0930932 0.093149 0.0932047 +0.0932604 0.0933162 0.093372 0.0934278 0.0934836 0.0935394 0.0935953 +0.0936511 0.093707 0.0937629 0.0938188 0.0938747 0.0939306 0.0939866 +0.0940425 0.0940985 0.0941545 0.0942105 0.0942665 0.0943226 0.0943786 +0.0944347 0.0944908 0.0945469 0.094603 0.0946591 0.0947152 0.0947714 +0.0948276 0.0948838 0.09494 0.0949962 0.0950524 0.0951086 0.0951649 +0.0952212 0.0952775 0.0953338 0.0953901 0.0954464 0.0955028 0.0955591 +0.0956155 0.0956719 0.0957283 0.0957847 0.0958412 0.0958976 0.0959541 +0.0960106 0.0960671 0.0961236 0.0961801 0.0962367 0.0962932 0.0963498 +0.0964064 0.096463 0.0965196 0.0965762 0.0966329 0.0966895 0.0967462 +0.0968029 0.0968596 0.0969163 0.0969731 0.0970298 0.0970866 0.0971433 +0.0972001 0.097257 0.0973138 0.0973706 0.0974275 0.0974843 0.0975412 +0.0975981 0.097655 0.097712 0.0977689 0.0978259 0.0978828 0.0979398 +0.0979968 0.0980538 0.0981109 0.0981679 0.098225 0.098282 0.0983391 +0.0983962 0.0984534 0.0985105 0.0985676 0.0986248 0.098682 0.0987392 +0.0987964 0.0988536 0.0989108 0.0989681 0.0990254 0.0990826 0.0991399 +0.0991972 0.0992546 0.0993119 0.0993693 0.0994266 0.099484 0.0995414 +0.0995988 0.0996563 0.0997137 0.0997712 0.0998286 0.0998861 0.0999436 +0.100001 0.100059 0.100116 0.100174 0.100231 0.100289 0.100347 0.100404 +0.100462 0.100519 0.100577 0.100635 0.100693 0.10075 0.100808 0.100866 +0.100923 0.100981 0.101039 0.101097 0.101155 0.101212 0.10127 0.101328 +0.101386 0.101444 0.101502 0.10156 0.101618 0.101676 0.101733 0.101791 +0.101849 0.101907 0.101965 0.102024 0.102082 0.10214 0.102198 0.102256 +0.102314 0.102372 0.10243 0.102488 0.102546 0.102605 0.102663 0.102721 +0.102779 0.102837 0.102896 0.102954 0.103012 0.103071 0.103129 0.103187 +0.103246 0.103304 0.103362 0.103421 0.103479 0.103537 0.103596 0.103654 +0.103713 0.103771 0.10383 0.103888 0.103947 0.104005 0.104064 0.104122 +0.104181 0.104239 0.104298 0.104357 0.104415 0.104474 0.104533 0.104591 +0.10465 0.104709 0.104767 0.104826 0.104885 0.104944 0.105002 0.105061 +0.10512 0.105179 0.105238 0.105297 0.105355 0.105414 0.105473 0.105532 +0.105591 0.10565 0.105709 0.105768 0.105827 0.105886 0.105945 0.106004 +0.106063 0.106122 0.106181 0.10624 0.106299 0.106358 0.106417 0.106476 +0.106536 0.106595 0.106654 0.106713 0.106772 0.106832 0.106891 0.10695 +0.107009 0.107069 0.107128 0.107187 0.107247 0.107306 0.107365 0.107425 +0.107484 0.107543 0.107603 0.107662 0.107722 0.107781 0.107841 0.1079 +0.10796 0.108019 0.108079 0.108138 0.108198 0.108257 0.108317 0.108376 +0.108436 0.108496 0.108555 0.108615 0.108675 0.108734 0.108794 0.108854 +0.108914 0.108973 0.109033 0.109093 0.109153 0.109212 0.109272 0.109332 +0.109392 0.109452 0.109512 0.109571 0.109631 0.109691 0.109751 0.109811 +0.109871 0.109931 0.109991 0.110051 0.110111 0.110171 0.110231 0.110291 +0.110351 0.110411 0.110472 0.110532 0.110592 0.110652 0.110712 0.110772 +0.110832 0.110893 0.110953 0.111013 0.111073 0.111134 0.111194 0.111254 +0.111314 0.111375 0.111435 0.111495 0.111556 0.111616 0.111677 0.111737 +0.111797 0.111858 0.111918 0.111979 0.112039 0.1121 0.11216 0.112221 +0.112281 0.112342 0.112402 0.112463 0.112523 0.112584 0.112645 0.112705 +0.112766 0.112827 0.112887 0.112948 0.113009 0.113069 0.11313 0.113191 +0.113252 0.113312 0.113373 0.113434 0.113495 0.113556 0.113616 0.113677 +0.113738 0.113799 0.11386 0.113921 0.113982 0.114043 0.114104 0.114165 +0.114226 0.114287 0.114348 0.114409 0.11447 0.114531 0.114592 0.114653 +0.114714 0.114775 0.114836 0.114897 0.114959 0.11502 0.115081 0.115142 +0.115203 0.115265 0.115326 0.115387 0.115448 0.11551 0.115571 0.115632 +0.115694 0.115755 0.115816 0.115878 0.115939 0.116 0.116062 0.116123 +0.116185 0.116246 0.116308 0.116369 0.116431 0.116492 0.116554 0.116615 +0.116677 0.116738 0.1168 0.116861 0.116923 0.116985 0.117046 0.117108 +0.11717 0.117231 0.117293 0.117355 0.117416 0.117478 0.11754 0.117602 +0.117663 0.117725 0.117787 0.117849 0.117911 0.117972 0.118034 0.118096 +0.118158 0.11822 0.118282 0.118344 0.118406 0.118468 0.11853 0.118592 +0.118654 0.118716 0.118778 0.11884 0.118902 0.118964 0.119026 0.119088 +0.11915 0.119212 0.119274 0.119337 0.119399 0.119461 0.119523 0.119585 +0.119648 0.11971 0.119772 0.119834 0.119897 0.119959 0.120021 0.120084 +0.120146 0.120208 0.120271 0.120333 0.120395 0.120458 0.12052 0.120583 +0.120645 0.120708 0.12077 0.120833 0.120895 0.120958 0.12102 0.121083 +0.121145 0.121208 0.12127 0.121333 0.121396 0.121458 0.121521 0.121584 +0.121646 0.121709 0.121772 0.121834 0.121897 0.12196 0.122022 0.122085 +0.122148 0.122211 0.122274 0.122336 0.122399 0.122462 0.122525 0.122588 +0.122651 0.122714 0.122777 0.12284 0.122903 0.122965 0.123028 0.123091 +0.123154 0.123217 0.12328 0.123344 0.123407 0.12347 0.123533 0.123596 +0.123659 0.123722 0.123785 0.123848 0.123912 0.123975 0.124038 0.124101 +0.124164 0.124228 0.124291 0.124354 0.124417 0.124481 0.124544 0.124607 +0.124671 0.124734 0.124797 0.124861 0.124924 0.124988 0.125051 0.125114 +0.125178 0.125241 0.125305 0.125368 0.125432 0.125495 0.125559 0.125622 +0.125686 0.12575 0.125813 0.125877 0.12594 0.126004 0.126068 0.126131 +0.126195 0.126259 0.126322 0.126386 0.12645 0.126513 0.126577 0.126641 +0.126705 0.126769 0.126832 0.126896 0.12696 0.127024 0.127088 0.127152 +0.127215 0.127279 0.127343 0.127407 0.127471 0.127535 0.127599 0.127663 +0.127727 0.127791 0.127855 0.127919 0.127983 0.128047 0.128111 0.128175 +0.128239 0.128304 0.128368 0.128432 0.128496 0.12856 0.128624 0.128689 +0.128753 0.128817 0.128881 0.128946 0.12901 0.129074 0.129138 0.129203 +0.129267 0.129331 0.129396 0.12946 0.129524 0.129589 0.129653 0.129718 +0.129782 0.129847 0.129911 0.129975 0.13004 0.130104 0.130169 0.130233 +0.130298 0.130363 0.130427 0.130492 0.130556 0.130621 0.130686 0.13075 +0.130815 0.13088 0.130944 0.131009 0.131074 0.131138 0.131203 0.131268 +0.131333 0.131397 0.131462 0.131527 0.131592 0.131657 0.131721 0.131786 +0.131851 0.131916 0.131981 0.132046 0.132111 0.132176 0.132241 0.132306 +0.132371 0.132436 0.132501 0.132566 0.132631 0.132696 0.132761 0.132826 +0.132891 0.132956 0.133021 0.133086 0.133151 0.133216 0.133282 0.133347 +0.133412 0.133477 0.133542 0.133608 0.133673 0.133738 0.133803 0.133869 +0.133934 0.133999 0.134065 0.13413 0.134195 0.134261 0.134326 0.134391 +0.134457 0.134522 0.134588 0.134653 0.134719 0.134784 0.13485 0.134915 +0.134981 0.135046 0.135112 0.135177 0.135243 0.135308 0.135374 0.13544 +0.135505 0.135571 0.135636 0.135702 0.135768 0.135833 0.135899 0.135965 +0.136031 0.136096 0.136162 0.136228 0.136294 0.136359 0.136425 0.136491 +0.136557 0.136623 0.136689 0.136755 0.13682 0.136886 0.136952 0.137018 +0.137084 0.13715 0.137216 0.137282 0.137348 0.137414 0.13748 0.137546 +0.137612 0.137678 0.137744 0.13781 0.137876 0.137943 0.138009 0.138075 +0.138141 0.138207 0.138273 0.13834 0.138406 0.138472 0.138538 0.138604 +0.138671 0.138737 0.138803 0.13887 0.138936 0.139002 0.139069 0.139135 +0.139201 0.139268 0.139334 0.1394 0.139467 0.139533 0.1396 0.139666 +0.139733 0.139799 0.139866 0.139932; +#A 4000 0.139999 0.140065 0.140132 0.140198 0.140265 0.140332 0.140398 +0.140465 0.140531 0.140598 0.140665 0.140731 0.140798 0.140865 0.140932 +0.140998 0.141065 0.141132 0.141199 0.141265 0.141332 0.141399 0.141466 +0.141533 0.141599 0.141666 0.141733 0.1418 0.141867 0.141934 0.142001 +0.142068 0.142135 0.142202 0.142269 0.142336 0.142403 0.14247 0.142537 +0.142604 0.142671 0.142738 0.142805 0.142872 0.142939 0.143006 0.143073 +0.14314 0.143208 0.143275 0.143342 0.143409 0.143476 0.143544 0.143611 +0.143678 0.143745 0.143813 0.14388 0.143947 0.144015 0.144082 0.144149 +0.144217 0.144284 0.144351 0.144419 0.144486 0.144554 0.144621 0.144688 +0.144756 0.144823 0.144891 0.144958 0.145026 0.145093 0.145161 0.145228 +0.145296 0.145364 0.145431 0.145499 0.145566 0.145634 0.145702 0.145769 +0.145837 0.145905 0.145972 0.14604 0.146108 0.146176 0.146243 0.146311 +0.146379 0.146447 0.146514 0.146582 0.14665 0.146718 0.146786 0.146854 +0.146921 0.146989 0.147057 0.147125 0.147193 0.147261 0.147329 0.147397 +0.147465 0.147533 0.147601 0.147669 0.147737 0.147805 0.147873 0.147941 +0.148009 0.148077 0.148145 0.148214 0.148282 0.14835 0.148418 0.148486 +0.148554 0.148623 0.148691 0.148759 0.148827 0.148896 0.148964 0.149032 +0.1491 0.149169 0.149237 0.149305 0.149374 0.149442 0.14951 0.149579 +0.149647 0.149716 0.149784 0.149852 0.149921 0.149989 0.150058 0.150126 +0.150195 0.150263 0.150332 0.1504 0.150469 0.150538 0.150606 0.150675 +0.150743 0.150812 0.150881 0.150949 0.151018 0.151086 0.151155 0.151224 +0.151293 0.151361 0.15143 0.151499 0.151567 0.151636 0.151705 0.151774 +0.151843 0.151911 0.15198 0.152049 0.152118 0.152187 0.152256 0.152325 +0.152394 0.152462 0.152531 0.1526 0.152669 0.152738 0.152807 0.152876 +0.152945 0.153014 0.153083 0.153152 0.153221 0.15329 0.15336 0.153429 +0.153498 0.153567 0.153636 0.153705 0.153774 0.153844 0.153913 0.153982 +0.154051 0.15412 0.15419 0.154259 0.154328 0.154397 0.154467 0.154536 +0.154605 0.154675 0.154744 0.154813 0.154883 0.154952 0.155021 0.155091 +0.15516 0.15523 0.155299 0.155369 0.155438 0.155508 0.155577 0.155647 +0.155716 0.155786 0.155855 0.155925 0.155994 0.156064 0.156133 0.156203 +0.156273 0.156342 0.156412 0.156482 0.156551 0.156621 0.156691 0.15676 +0.15683 0.1569 0.15697 0.157039 0.157109 0.157179 0.157249 0.157319 +0.157388 0.157458 0.157528 0.157598 0.157668 0.157738 0.157808 0.157877 +0.157947 0.158017 0.158087 0.158157 0.158227 0.158297 0.158367 0.158437 +0.158507 0.158577 0.158647 0.158717 0.158787 0.158857 0.158928 0.158998 +0.159068 0.159138 0.159208 0.159278 0.159348 0.159419 0.159489 0.159559 +0.159629 0.159699 0.15977 0.15984 0.15991 0.159981 0.160051 0.160121 +0.160192 0.160262 0.160332 0.160403 0.160473 0.160543 0.160614 0.160684 +0.160755 0.160825 0.160895 0.160966 0.161036 0.161107 0.161177 0.161248 +0.161318 0.161389 0.161459 0.16153 0.161601 0.161671 0.161742 0.161812 +0.161883 0.161954 0.162024 0.162095 0.162166 0.162236 0.162307 0.162378 +0.162448 0.162519 0.16259 0.162661 0.162731 0.162802 0.162873 0.162944 +0.163015 0.163086 0.163156 0.163227 0.163298 0.163369 0.16344 0.163511 +0.163582 0.163653 0.163724 0.163795 0.163865 0.163936 0.164007 0.164078 +0.164149 0.164221 0.164292 0.164363 0.164434 0.164505 0.164576 0.164647 +0.164718 0.164789 0.16486 0.164932 0.165003 0.165074 0.165145 0.165216 +0.165287 0.165359 0.16543 0.165501 0.165572 0.165644 0.165715 0.165786 +0.165858 0.165929 0.166 0.166072 0.166143 0.166214 0.166286 0.166357 +0.166429 0.1665 0.166571 0.166643 0.166714 0.166786 0.166857 0.166929 +0.167 0.167072 0.167143 0.167215 0.167287 0.167358 0.16743 0.167501 +0.167573 0.167645 0.167716 0.167788 0.167859 0.167931 0.168003 0.168074 +0.168146 0.168218 0.16829 0.168361 0.168433 0.168505 0.168577 0.168648 +0.16872 0.168792 0.168864 0.168936 0.169008 0.169079 0.169151 0.169223 +0.169295 0.169367 0.169439 0.169511 0.169583 0.169655 0.169727 0.169799 +0.169871 0.169943 0.170015 0.170087 0.170159 0.170231 0.170303 0.170375 +0.170447 0.170519 0.170591 0.170664 0.170736 0.170808 0.17088 0.170952 +0.171024 0.171097 0.171169 0.171241 0.171313 0.171386 0.171458 0.17153 +0.171602 0.171675 0.171747 0.171819 0.171892 0.171964 0.172036 0.172109 +0.172181 0.172254 0.172326 0.172398 0.172471 0.172543 0.172616 0.172688 +0.172761 0.172833 0.172906 0.172978 0.173051 0.173123 0.173196 0.173268 +0.173341 0.173414 0.173486 0.173559 0.173631 0.173704 0.173777 0.173849 +0.173922 0.173995 0.174067 0.17414 0.174213 0.174286 0.174358 0.174431 +0.174504 0.174577 0.174649 0.174722 0.174795 0.174868 0.174941 0.175014 +0.175086 0.175159 0.175232 0.175305 0.175378 0.175451 0.175524 0.175597 +0.17567 0.175743 0.175816 0.175889 0.175962 0.176035 0.176108 0.176181 +0.176254 0.176327 0.1764 0.176473 0.176546 0.176619 0.176693 0.176766 +0.176839 0.176912 0.176985 0.177058 0.177132 0.177205 0.177278 0.177351 +0.177424 0.177498 0.177571 0.177644 0.177718 0.177791 0.177864 0.177938 +0.178011 0.178084 0.178158 0.178231 0.178304 0.178378 0.178451 0.178525 +0.178598 0.178671 0.178745 0.178818 0.178892 0.178965 0.179039 0.179112 +0.179186 0.179259 0.179333 0.179407 0.17948 0.179554 0.179627 0.179701 +0.179775 0.179848 0.179922 0.179996 0.180069 0.180143 0.180217 0.18029 +0.180364 0.180438 0.180512 0.180585 0.180659 0.180733 0.180807 0.18088 +0.180954 0.181028 0.181102 0.181176 0.18125 0.181323 0.181397 0.181471 +0.181545 0.181619 0.181693 0.181767 0.181841 0.181915 0.181989 0.182063 +0.182137 0.182211 0.182285 0.182359 0.182433 0.182507 0.182581 0.182655 +0.182729 0.182803 0.182877 0.182952 0.183026 0.1831 0.183174 0.183248 +0.183322 0.183397 0.183471 0.183545 0.183619 0.183694 0.183768 0.183842 +0.183916 0.183991 0.184065 0.184139 0.184214 0.184288 0.184362 0.184437 +0.184511 0.184585 0.18466 0.184734 0.184809 0.184883 0.184957 0.185032 +0.185106 0.185181 0.185255 0.18533 0.185404 0.185479 0.185553 0.185628 +0.185703 0.185777 0.185852 0.185926 0.186001 0.186076 0.18615 0.186225 +0.186299 0.186374 0.186449 0.186523 0.186598 0.186673 0.186748 0.186822 +0.186897 0.186972 0.187047 0.187121 0.187196 0.187271 0.187346 0.187421 +0.187495 0.18757 0.187645 0.18772 0.187795 0.18787 0.187945 0.18802 +0.188094 0.188169 0.188244 0.188319 0.188394 0.188469 0.188544 0.188619 +0.188694 0.188769 0.188844 0.188919 0.188995 0.18907 0.189145 0.18922 +0.189295 0.18937 0.189445 0.18952 0.189595 0.189671 0.189746 0.189821 +0.189896 0.189971 0.190047 0.190122 0.190197 0.190272 0.190348 0.190423 +0.190498 0.190573 0.190649 0.190724 0.190799 0.190875 0.19095 0.191026 +0.191101 0.191176 0.191252 0.191327 0.191403 0.191478 0.191553 0.191629 +0.191704 0.19178 0.191855 0.191931 0.192006 0.192082 0.192158 0.192233 +0.192309 0.192384 0.19246 0.192535 0.192611 0.192687 0.192762 0.192838 +0.192914 0.192989 0.193065 0.193141 0.193216 0.193292 0.193368 0.193443 +0.193519 0.193595 0.193671 0.193747 0.193822 0.193898 0.193974 0.19405 +0.194126 0.194201 0.194277 0.194353 0.194429 0.194505 0.194581 0.194657 +0.194733 0.194809 0.194885 0.194961 0.195036 0.195112 0.195188 0.195264 +0.19534 0.195416 0.195493 0.195569 0.195645 0.195721 0.195797 0.195873 +0.195949 0.196025 0.196101 0.196177 0.196254 0.19633 0.196406 0.196482 +0.196558 0.196634 0.196711 0.196787 0.196863 0.196939 0.197016 0.197092 +0.197168 0.197244 0.197321 0.197397 0.197473 0.19755 0.197626 0.197702 +0.197779 0.197855 0.197932 0.198008 0.198084 0.198161 0.198237 0.198314 +0.19839 0.198467 0.198543 0.19862 0.198696 0.198773 0.198849 0.198926 +0.199002 0.199079 0.199155 0.199232 0.199309 0.199385 0.199462 0.199538 +0.199615 0.199692 0.199768 0.199845 0.199922 0.199998 0.200075 0.200152 +0.200229 0.200305 0.200382 0.200459 0.200536 0.200612 0.200689 0.200766 +0.200843 0.20092 0.200996 0.201073 0.20115 0.201227 0.201304 0.201381 +0.201458 0.201535 0.201612 0.201688 0.201765 0.201842 0.201919 0.201996 +0.202073 0.20215 0.202227 0.202304 0.202381 0.202458 0.202536 0.202613 +0.20269 0.202767 0.202844 0.202921 0.202998 0.203075 0.203152 0.20323 +0.203307 0.203384 0.203461 0.203538 0.203615 0.203693 0.20377 0.203847 +0.203924 0.204002 0.204079 0.204156 0.204234 0.204311 0.204388 0.204465 +0.204543 0.20462 0.204698 0.204775 0.204852 0.20493 0.205007 0.205084 +0.205162 0.205239 0.205317 0.205394 0.205472 0.205549 0.205627 0.205704 +0.205782 0.205859 0.205937 0.206014 0.206092 0.206169 0.206247 0.206325 +0.206402 0.20648 0.206557 0.206635 0.206713 0.20679 0.206868 0.206946 +0.207023 0.207101 0.207179 0.207256 0.207334 0.207412 0.20749 0.207567 +0.207645 0.207723 0.207801 0.207879 0.207956 0.208034 0.208112 0.20819 +0.208268 0.208346 0.208424 0.208501 0.208579 0.208657 0.208735 0.208813 +0.208891 0.208969 0.209047 0.209125 0.209203 0.209281 0.209359 0.209437 +0.209515 0.209593 0.209671 0.209749 0.209827 0.209905 0.209983 0.210061 +0.21014 0.210218 0.210296 0.210374 0.210452 0.21053 0.210608 0.210687 +0.210765 0.210843 0.210921 0.211 0.211078 0.211156 0.211234 0.211313 +0.211391 0.211469 0.211547 0.211626 0.211704 0.211782 0.211861 0.211939 +0.212018 0.212096 0.212174 0.212253 0.212331 0.21241 0.212488 0.212566 +0.212645; +#A 5000 0.212723 0.212802 0.21288 0.212959 0.213037 0.213116 0.213194 +0.213273 0.213351 0.21343 0.213509 0.213587 0.213666 0.213744 0.213823 +0.213902 0.21398 0.214059 0.214137 0.214216 0.214295 0.214374 0.214452 +0.214531 0.21461 0.214688 0.214767 0.214846 0.214925 0.215003 0.215082 +0.215161 0.21524 0.215319 0.215397 0.215476 0.215555 0.215634 0.215713 +0.215792 0.215871 0.215949 0.216028 0.216107 0.216186 0.216265 0.216344 +0.216423 0.216502 0.216581 0.21666 0.216739 0.216818 0.216897 0.216976 +0.217055 0.217134 0.217213 0.217292 0.217371 0.21745 0.21753 0.217609 +0.217688 0.217767 0.217846 0.217925 0.218004 0.218084 0.218163 0.218242 +0.218321 0.2184 0.21848 0.218559 0.218638 0.218717 0.218797 0.218876 +0.218955 0.219034 0.219114 0.219193 0.219272 0.219352 0.219431 0.21951 +0.21959 0.219669 0.219749 0.219828 0.219907 0.219987 0.220066 0.220146 +0.220225 0.220305 0.220384 0.220464 0.220543 0.220623 0.220702 0.220782 +0.220861 0.220941 0.22102 0.2211 0.221179 0.221259 0.221339 0.221418 +0.221498 0.221577 0.221657 0.221737 0.221816 0.221896 0.221976 0.222055 +0.222135 0.222215 0.222295 0.222374 0.222454 0.222534 0.222614 0.222693 +0.222773 0.222853 0.222933 0.223013 0.223092 0.223172 0.223252 0.223332 +0.223412 0.223492 0.223572 0.223651 0.223731 0.223811 0.223891 0.223971 +0.224051 0.224131 0.224211 0.224291 0.224371 0.224451 0.224531 0.224611 +0.224691 0.224771 0.224851 0.224931 0.225011 0.225091 0.225171 0.225251 +0.225332 0.225412 0.225492 0.225572 0.225652 0.225732 0.225812 0.225893 +0.225973 0.226053 0.226133 0.226213 0.226294 0.226374 0.226454 0.226534 +0.226615 0.226695 0.226775 0.226856 0.226936 0.227016 0.227096 0.227177 +0.227257 0.227338 0.227418 0.227498 0.227579 0.227659 0.227739 0.22782 +0.2279 0.227981 0.228061 0.228142 0.228222 0.228303 0.228383 0.228464 +0.228544 0.228625 0.228705 0.228786 0.228866 0.228947 0.229027 0.229108 +0.229189 0.229269 0.22935 0.22943 0.229511 0.229592 0.229672 0.229753 +0.229834 0.229914 0.229995 0.230076 0.230156 0.230237 0.230318 0.230399 +0.230479 0.23056 0.230641 0.230722 0.230802 0.230883 0.230964 0.231045 +0.231126 0.231206 0.231287 0.231368 0.231449 0.23153 0.231611 0.231692 +0.231773 0.231854 0.231934 0.232015 0.232096 0.232177 0.232258 0.232339 +0.23242 0.232501 0.232582 0.232663 0.232744 0.232825 0.232906 0.232987 +0.233068 0.233149 0.233231 0.233312 0.233393 0.233474 0.233555 0.233636 +0.233717 0.233798 0.23388 0.233961 0.234042 0.234123 0.234204 0.234286 +0.234367 0.234448 0.234529 0.23461 0.234692 0.234773 0.234854 0.234936 +0.235017 0.235098 0.235179 0.235261 0.235342 0.235424 0.235505 0.235586 +0.235668 0.235749 0.23583 0.235912 0.235993 0.236075 0.236156 0.236238 +0.236319 0.2364 0.236482 0.236563 0.236645 0.236726 0.236808 0.236889 +0.236971 0.237052 0.237134 0.237216 0.237297 0.237379 0.23746 0.237542 +0.237624 0.237705 0.237787 0.237868 0.23795 0.238032 0.238113 0.238195 +0.238277 0.238358 0.23844 0.238522 0.238604 0.238685 0.238767 0.238849 +0.238931 0.239012 0.239094 0.239176 0.239258 0.23934 0.239421 0.239503 +0.239585 0.239667 0.239749 0.239831 0.239912 0.239994 0.240076 0.240158 +0.24024 0.240322 0.240404 0.240486 0.240568 0.24065 0.240732 0.240814 +0.240896 0.240978 0.24106 0.241142 0.241224 0.241306 0.241388 0.24147 +0.241552 0.241634 0.241716 0.241798 0.24188 0.241963 0.242045 0.242127 +0.242209 0.242291 0.242373 0.242455 0.242538 0.24262 0.242702 0.242784 +0.242866 0.242949 0.243031 0.243113 0.243195 0.243278 0.24336 0.243442 +0.243524 0.243607 0.243689 0.243771 0.243854 0.243936 0.244018 0.244101 +0.244183 0.244266 0.244348 0.24443 0.244513 0.244595 0.244678 0.24476 +0.244842 0.244925 0.245007 0.24509 0.245172 0.245255 0.245337 0.24542 +0.245502 0.245585 0.245667 0.24575 0.245833 0.245915 0.245998 0.24608 +0.246163 0.246246 0.246328 0.246411 0.246493 0.246576 0.246659 0.246741 +0.246824 0.246907 0.246989 0.247072 0.247155 0.247237 0.24732 0.247403 +0.247486 0.247568 0.247651 0.247734 0.247817 0.2479 0.247982 0.248065 +0.248148 0.248231 0.248314 0.248396 0.248479 0.248562 0.248645 0.248728 +0.248811 0.248894 0.248977 0.24906 0.249143 0.249225 0.249308 0.249391 +0.249474 0.249557 0.24964 0.249723 0.249806 0.249889 0.249972 0.250055 +0.250138 0.250221 0.250304 0.250388 0.250471 0.250554 0.250637 0.25072 +0.250803 0.250886 0.250969 0.251052 0.251136 0.251219 0.251302 0.251385 +0.251468 0.251551 0.251635 0.251718 0.251801 0.251884 0.251968 0.252051 +0.252134 0.252217 0.252301 0.252384 0.252467 0.252551 0.252634 0.252717 +0.2528 0.252884 0.252967 0.253051 0.253134 0.253217 0.253301 0.253384 +0.253468 0.253551 0.253634 0.253718 0.253801 0.253885 0.253968 0.254052 +0.254135 0.254219 0.254302 0.254386 0.254469 0.254553 0.254636 0.25472 +0.254803 0.254887 0.25497 0.255054 0.255138 0.255221 0.255305 0.255388 +0.255472 0.255556 0.255639 0.255723 0.255807 0.25589 0.255974 0.256058 +0.256141 0.256225 0.256309 0.256392 0.256476 0.25656 0.256644 0.256727 +0.256811 0.256895 0.256979 0.257062 0.257146 0.25723 0.257314 0.257398 +0.257482 0.257565 0.257649 0.257733 0.257817 0.257901 0.257985 0.258069 +0.258153 0.258236 0.25832 0.258404 0.258488 0.258572 0.258656 0.25874 +0.258824 0.258908 0.258992 0.259076 0.25916 0.259244 0.259328 0.259412 +0.259496 0.25958 0.259664 0.259748 0.259833 0.259917 0.260001 0.260085 +0.260169 0.260253 0.260337 0.260421 0.260506 0.26059 0.260674 0.260758 +0.260842 0.260926 0.261011 0.261095 0.261179 0.261263 0.261348 0.261432 +0.261516 0.2616 0.261685 0.261769 0.261853 0.261938 0.262022 0.262106 +0.262191 0.262275 0.262359 0.262444 0.262528 0.262612 0.262697 0.262781 +0.262865 0.26295 0.263034 0.263119 0.263203 0.263288 0.263372 0.263457 +0.263541 0.263625 0.26371 0.263794 0.263879 0.263963 0.264048 0.264133 +0.264217 0.264302 0.264386 0.264471 0.264555 0.26464 0.264724 0.264809 +0.264894 0.264978 0.265063 0.265148 0.265232 0.265317 0.265402 0.265486 +0.265571 0.265656 0.26574 0.265825 0.26591 0.265994 0.266079 0.266164 +0.266249 0.266333 0.266418 0.266503 0.266588 0.266672 0.266757 0.266842 +0.266927 0.267012 0.267097 0.267181 0.267266 0.267351 0.267436 0.267521 +0.267606 0.267691 0.267776 0.26786 0.267945 0.26803 0.268115 0.2682 +0.268285 0.26837 0.268455 0.26854 0.268625 0.26871 0.268795 0.26888 +0.268965 0.26905 0.269135 0.26922 0.269305 0.26939 0.269475 0.26956 +0.269646 0.269731 0.269816 0.269901 0.269986 0.270071 0.270156 0.270241 +0.270327 0.270412 0.270497 0.270582 0.270667 0.270752 0.270838 0.270923 +0.271008 0.271093 0.271179 0.271264 0.271349 0.271434 0.27152 0.271605 +0.27169 0.271776 0.271861 0.271946 0.272031 0.272117 0.272202 0.272287 +0.272373 0.272458 0.272544 0.272629 0.272714 0.2728 0.272885 0.272971 +0.273056 0.273141 0.273227 0.273312 0.273398 0.273483 0.273569 0.273654 +0.27374 0.273825 0.273911 0.273996 0.274082 0.274167 0.274253 0.274338 +0.274424 0.27451 0.274595 0.274681 0.274766 0.274852 0.274937 0.275023 +0.275109 0.275194 0.27528 0.275366 0.275451 0.275537 0.275623 0.275708 +0.275794 0.27588 0.275965 0.276051 0.276137 0.276223 0.276308 0.276394 +0.27648 0.276566 0.276651 0.276737 0.276823 0.276909 0.276995 0.27708 +0.277166 0.277252 0.277338 0.277424 0.27751 0.277595 0.277681 0.277767 +0.277853 0.277939 0.278025 0.278111 0.278197 0.278283 0.278369 0.278454 +0.27854 0.278626 0.278712 0.278798 0.278884 0.27897 0.279056 0.279142 +0.279228 0.279314 0.2794 0.279486 0.279572 0.279659 0.279745 0.279831 +0.279917 0.280003 0.280089 0.280175 0.280261 0.280347 0.280433 0.28052 +0.280606 0.280692 0.280778 0.280864 0.28095 0.281037 0.281123 0.281209 +0.281295 0.281381 0.281468 0.281554 0.28164 0.281726 0.281813 0.281899 +0.281985 0.282071 0.282158 0.282244 0.28233 0.282417 0.282503 0.282589 +0.282676 0.282762 0.282848 0.282935 0.283021 0.283107 0.283194 0.28328 +0.283367 0.283453 0.28354 0.283626 0.283712 0.283799 0.283885 0.283972 +0.284058 0.284145 0.284231 0.284318 0.284404 0.284491 0.284577 0.284664 +0.28475 0.284837 0.284923 0.28501 0.285096 0.285183 0.28527 0.285356 +0.285443 0.285529 0.285616 0.285703 0.285789 0.285876 0.285962 0.286049 +0.286136 0.286222 0.286309 0.286396 0.286482 0.286569 0.286656 0.286743 +0.286829 0.286916 0.287003 0.28709 0.287176 0.287263 0.28735 0.287437 +0.287523 0.28761 0.287697 0.287784 0.287871 0.287957 0.288044 0.288131 +0.288218 0.288305 0.288392 0.288478 0.288565 0.288652 0.288739 0.288826 +0.288913 0.289 0.289087 0.289174 0.289261 0.289348 0.289435 0.289522 +0.289608 0.289695 0.289782 0.289869 0.289956 0.290043 0.29013 0.290217 +0.290305 0.290392 0.290479 0.290566 0.290653 0.29074 0.290827 0.290914 +0.291001 0.291088 0.291175 0.291262 0.29135 0.291437 0.291524 0.291611 +0.291698 0.291785 0.291872 0.29196 0.292047 0.292134 0.292221 0.292308 +0.292396 0.292483 0.29257 0.292657 0.292744 0.292832 0.292919 0.293006 +0.293094 0.293181 0.293268 0.293355 0.293443 0.29353 0.293617 0.293705 +0.293792 0.293879 0.293967 0.294054 0.294141 0.294229 0.294316 0.294404 +0.294491 0.294578 0.294666 0.294753 0.294841 0.294928 0.295016 0.295103 +0.29519 0.295278 0.295365 0.295453 0.29554 0.295628 0.295715 0.295803 +0.29589; +#A 6000 0.295978 0.296065 0.296153 0.296241 0.296328 0.296416 0.296503 +0.296591 0.296678 0.296766 0.296854 0.296941 0.297029 0.297116 0.297204 +0.297292 0.297379 0.297467 0.297555 0.297642 0.29773 0.297818 0.297905 +0.297993 0.298081 0.298168 0.298256 0.298344 0.298432 0.298519 0.298607 +0.298695 0.298783 0.29887 0.298958 0.299046 0.299134 0.299222 0.299309 +0.299397 0.299485 0.299573 0.299661 0.299749 0.299836 0.299924 0.300012 +0.3001 0.300188 0.300276 0.300364 0.300452 0.300539 0.300627 0.300715 +0.300803 0.300891 0.300979 0.301067 0.301155 0.301243 0.301331 0.301419 +0.301507 0.301595 0.301683 0.301771 0.301859 0.301947 0.302035 0.302123 +0.302211 0.302299 0.302387 0.302475 0.302563 0.302652 0.30274 0.302828 +0.302916 0.303004 0.303092 0.30318 0.303268 0.303357 0.303445 0.303533 +0.303621 0.303709 0.303797 0.303886 0.303974 0.304062 0.30415 0.304238 +0.304327 0.304415 0.304503 0.304591 0.30468 0.304768 0.304856 0.304944 +0.305033 0.305121 0.305209 0.305298 0.305386 0.305474 0.305562 0.305651 +0.305739 0.305827 0.305916 0.306004 0.306093 0.306181 0.306269 0.306358 +0.306446 0.306534 0.306623 0.306711 0.3068 0.306888 0.306977 0.307065 +0.307154 0.307242 0.30733 0.307419 0.307507 0.307596 0.307684 0.307773 +0.307861 0.30795 0.308038 0.308127 0.308215 0.308304 0.308393 0.308481 +0.30857 0.308658 0.308747 0.308835 0.308924 0.309013 0.309101 0.30919 +0.309278 0.309367 0.309456 0.309544 0.309633 0.309722 0.30981 0.309899 +0.309988 0.310076 0.310165 0.310254 0.310342 0.310431 0.31052 0.310609 +0.310697 0.310786 0.310875 0.310964 0.311052 0.311141 0.31123 0.311319 +0.311408 0.311496 0.311585 0.311674 0.311763 0.311852 0.31194 0.312029 +0.312118 0.312207 0.312296 0.312385 0.312474 0.312562 0.312651 0.31274 +0.312829 0.312918 0.313007 0.313096 0.313185 0.313274 0.313363 0.313452 +0.313541 0.313629 0.313718 0.313807 0.313896 0.313985 0.314074 0.314163 +0.314252 0.314341 0.31443 0.314519 0.314608 0.314698 0.314787 0.314876 +0.314965 0.315054 0.315143 0.315232 0.315321 0.31541 0.315499 0.315588 +0.315677 0.315767 0.315856 0.315945 0.316034 0.316123 0.316212 0.316301 +0.316391 0.31648 0.316569 0.316658 0.316747 0.316837 0.316926 0.317015 +0.317104 0.317194 0.317283 0.317372 0.317461 0.317551 0.31764 0.317729 +0.317818 0.317908 0.317997 0.318086 0.318175 0.318265 0.318354 0.318443 +0.318533 0.318622 0.318711 0.318801 0.31889 0.31898 0.319069 0.319158 +0.319248 0.319337 0.319427 0.319516 0.319605 0.319695 0.319784 0.319874 +0.319963 0.320052 0.320142 0.320231 0.320321 0.32041 0.3205 0.320589 +0.320679 0.320768 0.320858 0.320947 0.321037 0.321126 0.321216 0.321305 +0.321395 0.321485 0.321574 0.321664 0.321753 0.321843 0.321932 0.322022 +0.322112 0.322201 0.322291 0.32238 0.32247 0.32256 0.322649 0.322739 +0.322829 0.322918 0.323008 0.323098 0.323187 0.323277 0.323367 0.323456 +0.323546 0.323636 0.323725 0.323815 0.323905 0.323995 0.324084 0.324174 +0.324264 0.324354 0.324443 0.324533 0.324623 0.324713 0.324803 0.324892 +0.324982 0.325072 0.325162 0.325252 0.325341 0.325431 0.325521 0.325611 +0.325701 0.325791 0.325881 0.32597 0.32606 0.32615 0.32624 0.32633 +0.32642 0.32651 0.3266 0.32669 0.32678 0.32687 0.326959 0.327049 0.327139 +0.327229 0.327319 0.327409 0.327499 0.327589 0.327679 0.327769 0.327859 +0.327949 0.328039 0.328129 0.328219 0.328309 0.328399 0.32849 0.32858 +0.32867 0.32876 0.32885 0.32894 0.32903 0.32912 0.32921 0.3293 0.32939 +0.329481 0.329571 0.329661 0.329751 0.329841 0.329931 0.330021 0.330112 +0.330202 0.330292 0.330382 0.330472 0.330562 0.330653 0.330743 0.330833 +0.330923 0.331014 0.331104 0.331194 0.331284 0.331375 0.331465 0.331555 +0.331645 0.331736 0.331826 0.331916 0.332006 0.332097 0.332187 0.332277 +0.332368 0.332458 0.332548 0.332639 0.332729 0.332819 0.33291 0.333 +0.333091 0.333181 0.333271 0.333362 0.333452 0.333542 0.333633 0.333723 +0.333814 0.333904 0.333995 0.334085 0.334175 0.334266 0.334356 0.334447 +0.334537 0.334628 0.334718 0.334809 0.334899 0.33499 0.33508 0.335171 +0.335261 0.335352 0.335442 0.335533 0.335623 0.335714 0.335805 0.335895 +0.335986 0.336076 0.336167 0.336257 0.336348 0.336439 0.336529 0.33662 +0.33671 0.336801 0.336892 0.336982 0.337073 0.337164 0.337254 0.337345 +0.337436 0.337526 0.337617 0.337708 0.337798 0.337889 0.33798 0.33807 +0.338161 0.338252 0.338342 0.338433 0.338524 0.338615 0.338705 0.338796 +0.338887 0.338978 0.339068 0.339159 0.33925 0.339341 0.339432 0.339522 +0.339613 0.339704 0.339795 0.339886 0.339976 0.340067 0.340158 0.340249 +0.34034 0.340431 0.340522 0.340612 0.340703 0.340794 0.340885 0.340976 +0.341067 0.341158 0.341249 0.34134 0.341431 0.341521 0.341612 0.341703 +0.341794 0.341885 0.341976 0.342067 0.342158 0.342249 0.34234 0.342431 +0.342522 0.342613 0.342704 0.342795 0.342886 0.342977 0.343068 0.343159 +0.34325 0.343341 0.343432 0.343523 0.343614 0.343705 0.343797 0.343888 +0.343979 0.34407 0.344161 0.344252 0.344343 0.344434 0.344525 0.344616 +0.344708 0.344799 0.34489 0.344981 0.345072 0.345163 0.345254 0.345346 +0.345437 0.345528 0.345619 0.34571 0.345802 0.345893 0.345984 0.346075 +0.346166 0.346258 0.346349 0.34644 0.346531 0.346623 0.346714 0.346805 +0.346896 0.346988 0.347079 0.34717 0.347261 0.347353 0.347444 0.347535 +0.347627 0.347718 0.347809 0.347901 0.347992 0.348083 0.348175 0.348266 +0.348357 0.348449 0.34854 0.348631 0.348723 0.348814 0.348906 0.348997 +0.349088 0.34918 0.349271 0.349363 0.349454 0.349546 0.349637 0.349728 +0.34982 0.349911 0.350003 0.350094 0.350186 0.350277 0.350369 0.35046 +0.350552 0.350643 0.350735 0.350826 0.350918 0.351009 0.351101 0.351192 +0.351284 0.351375 0.351467 0.351558 0.35165 0.351741 0.351833 0.351925 +0.352016 0.352108 0.352199 0.352291 0.352382 0.352474 0.352566 0.352657 +0.352749 0.352841 0.352932 0.353024 0.353115 0.353207 0.353299 0.35339 +0.353482 0.353574 0.353665 0.353757 0.353849 0.35394 0.354032 0.354124 +0.354216 0.354307 0.354399 0.354491 0.354582 0.354674 0.354766 0.354858 +0.354949 0.355041 0.355133 0.355225 0.355316 0.355408 0.3555 0.355592 +0.355684 0.355775 0.355867 0.355959 0.356051 0.356143 0.356234 0.356326 +0.356418 0.35651 0.356602 0.356694 0.356785 0.356877 0.356969 0.357061 +0.357153 0.357245 0.357337 0.357429 0.357521 0.357612 0.357704 0.357796 +0.357888 0.35798 0.358072 0.358164 0.358256 0.358348 0.35844 0.358532 +0.358624 0.358716 0.358808 0.3589 0.358992 0.359084 0.359176 0.359268 +0.35936 0.359452 0.359544 0.359636 0.359728 0.35982 0.359912 0.360004 +0.360096 0.360188 0.36028 0.360372 0.360464 0.360556 0.360648 0.36074 +0.360832 0.360924 0.361016 0.361109 0.361201 0.361293 0.361385 0.361477 +0.361569 0.361661 0.361753 0.361845 0.361938 0.36203 0.362122 0.362214 +0.362306 0.362398 0.362491 0.362583 0.362675 0.362767 0.362859 0.362952 +0.363044 0.363136 0.363228 0.36332 0.363413 0.363505 0.363597 0.363689 +0.363782 0.363874 0.363966 0.364058 0.364151 0.364243 0.364335 0.364427 +0.36452 0.364612 0.364704 0.364797 0.364889 0.364981 0.365074 0.365166 +0.365258 0.36535 0.365443 0.365535 0.365627 0.36572 0.365812 0.365905 +0.365997 0.366089 0.366182 0.366274 0.366366 0.366459 0.366551 0.366644 +0.366736 0.366828 0.366921 0.367013 0.367106 0.367198 0.367291 0.367383 +0.367475 0.367568 0.36766 0.367753 0.367845 0.367938 0.36803 0.368123 +0.368215 0.368308 0.3684 0.368493 0.368585 0.368678 0.36877 0.368863 +0.368955 0.369048 0.36914 0.369233 0.369325 0.369418 0.36951 0.369603 +0.369695 0.369788 0.369881 0.369973 0.370066 0.370158 0.370251 0.370344 +0.370436 0.370529 0.370621 0.370714 0.370807 0.370899 0.370992 0.371084 +0.371177 0.37127 0.371362 0.371455 0.371548 0.37164 0.371733 0.371826 +0.371918 0.372011 0.372104 0.372196 0.372289 0.372382 0.372474 0.372567 +0.37266 0.372753 0.372845 0.372938 0.373031 0.373123 0.373216 0.373309 +0.373402 0.373494 0.373587 0.37368 0.373773 0.373866 0.373958 0.374051 +0.374144 0.374237 0.374329 0.374422 0.374515 0.374608 0.374701 0.374793 +0.374886 0.374979 0.375072 0.375165 0.375258 0.375351 0.375443 0.375536 +0.375629 0.375722 0.375815 0.375908 0.376001 0.376093 0.376186 0.376279 +0.376372 0.376465 0.376558 0.376651 0.376744 0.376837 0.37693 0.377022 +0.377115 0.377208 0.377301 0.377394 0.377487 0.37758 0.377673 0.377766 +0.377859 0.377952 0.378045 0.378138 0.378231 0.378324 0.378417 0.37851 +0.378603 0.378696 0.378789 0.378882 0.378975 0.379068 0.379161 0.379254 +0.379347 0.37944 0.379533 0.379626 0.379719 0.379812 0.379905 0.379998 +0.380092 0.380185 0.380278 0.380371 0.380464 0.380557 0.38065 0.380743 +0.380836 0.380929 0.381023 0.381116 0.381209 0.381302 0.381395 0.381488 +0.381581 0.381674 0.381768 0.381861 0.381954 0.382047 0.38214 0.382233 +0.382327 0.38242 0.382513 0.382606 0.382699 0.382793 0.382886 0.382979 +0.383072 0.383165 0.383259 0.383352 0.383445 0.383538 0.383632 0.383725 +0.383818 0.383911 0.384005 0.384098 0.384191 0.384284 0.384378 0.384471 +0.384564 0.384658 0.384751 0.384844 0.384937 0.385031 0.385124 0.385217 +0.385311 0.385404 0.385497 0.385591 0.385684 0.385777 0.385871 0.385964 +0.386057 0.386151 0.386244 0.386337 0.386431 0.386524 0.386617; +#A 7000 0.386711 0.386804 0.386898 0.386991 0.387084 0.387178 0.387271 +0.387365 0.387458 0.387551 0.387645 0.387738 0.387832 0.387925 0.388019 +0.388112 0.388205 0.388299 0.388392 0.388486 0.388579 0.388673 0.388766 +0.38886 0.388953 0.389047 0.38914 0.389234 0.389327 0.389421 0.389514 +0.389608 0.389701 0.389795 0.389888 0.389982 0.390075 0.390169 0.390262 +0.390356 0.390449 0.390543 0.390636 0.39073 0.390824 0.390917 0.391011 +0.391104 0.391198 0.391291 0.391385 0.391479 0.391572 0.391666 0.391759 +0.391853 0.391947 0.39204 0.392134 0.392227 0.392321 0.392415 0.392508 +0.392602 0.392696 0.392789 0.392883 0.392977 0.39307 0.393164 0.393257 +0.393351 0.393445 0.393539 0.393632 0.393726 0.39382 0.393913 0.394007 +0.394101 0.394194 0.394288 0.394382 0.394475 0.394569 0.394663 0.394757 +0.39485 0.394944 0.395038 0.395132 0.395225 0.395319 0.395413 0.395507 +0.3956 0.395694 0.395788 0.395882 0.395975 0.396069 0.396163 0.396257 +0.396351 0.396444 0.396538 0.396632 0.396726 0.39682 0.396913 0.397007 +0.397101 0.397195 0.397289 0.397382 0.397476 0.39757 0.397664 0.397758 +0.397852 0.397946 0.398039 0.398133 0.398227 0.398321 0.398415 0.398509 +0.398603 0.398696 0.39879 0.398884 0.398978 0.399072 0.399166 0.39926 +0.399354 0.399448 0.399542 0.399636 0.399729 0.399823 0.399917 0.400011 +0.400105 0.400199 0.400293 0.400387 0.400481 0.400575 0.400669 0.400763 +0.400857 0.400951 0.401045 0.401139 0.401233 0.401327 0.401421 0.401515 +0.401609 0.401703 0.401797 0.401891 0.401985 0.402079 0.402173 0.402267 +0.402361 0.402455 0.402549 0.402643 0.402737 0.402831 0.402925 0.403019 +0.403113 0.403207 0.403301 0.403395 0.403489 0.403583 0.403678 0.403772 +0.403866 0.40396 0.404054 0.404148 0.404242 0.404336 0.40443 0.404524 +0.404619 0.404713 0.404807 0.404901 0.404995 0.405089 0.405183 0.405277 +0.405372 0.405466 0.40556 0.405654 0.405748 0.405842 0.405936 0.406031 +0.406125 0.406219 0.406313 0.406407 0.406501 0.406596 0.40669 0.406784 +0.406878 0.406972 0.407067 0.407161 0.407255 0.407349 0.407443 0.407538 +0.407632 0.407726 0.40782 0.407915 0.408009 0.408103 0.408197 0.408292 +0.408386 0.40848 0.408574 0.408669 0.408763 0.408857 0.408951 0.409046 +0.40914 0.409234 0.409328 0.409423 0.409517 0.409611 0.409706 0.4098 +0.409894 0.409989 0.410083 0.410177 0.410271 0.410366 0.41046 0.410554 +0.410649 0.410743 0.410837 0.410932 0.411026 0.41112 0.411215 0.411309 +0.411404 0.411498 0.411592 0.411687 0.411781 0.411875 0.41197 0.412064 +0.412158 0.412253 0.412347 0.412442 0.412536 0.41263 0.412725 0.412819 +0.412914 0.413008 0.413102 0.413197 0.413291 0.413386 0.41348 0.413575 +0.413669 0.413763 0.413858 0.413952 0.414047 0.414141 0.414236 0.41433 +0.414425 0.414519 0.414614 0.414708 0.414802 0.414897 0.414991 0.415086 +0.41518 0.415275 0.415369 0.415464 0.415558 0.415653 0.415747 0.415842 +0.415936 0.416031 0.416125 0.41622 0.416314 0.416409 0.416503 0.416598 +0.416693 0.416787 0.416882 0.416976 0.417071 0.417165 0.41726 0.417354 +0.417449 0.417543 0.417638 0.417733 0.417827 0.417922 0.418016 0.418111 +0.418205 0.4183 0.418395 0.418489 0.418584 0.418678 0.418773 0.418868 +0.418962 0.419057 0.419151 0.419246 0.419341 0.419435 0.41953 0.419625 +0.419719 0.419814 0.419908 0.420003 0.420098 0.420192 0.420287 0.420382 +0.420476 0.420571 0.420666 0.42076 0.420855 0.42095 0.421044 0.421139 +0.421234 0.421328 0.421423 0.421518 0.421612 0.421707 0.421802 0.421896 +0.421991 0.422086 0.422181 0.422275 0.42237 0.422465 0.422559 0.422654 +0.422749 0.422844 0.422938 0.423033 0.423128 0.423222 0.423317 0.423412 +0.423507 0.423601 0.423696 0.423791 0.423886 0.42398 0.424075 0.42417 +0.424265 0.424359 0.424454 0.424549 0.424644 0.424739 0.424833 0.424928 +0.425023 0.425118 0.425213 0.425307 0.425402 0.425497 0.425592 0.425687 +0.425781 0.425876 0.425971 0.426066 0.426161 0.426255 0.42635 0.426445 +0.42654 0.426635 0.42673 0.426824 0.426919 0.427014 0.427109 0.427204 +0.427299 0.427394 0.427488 0.427583 0.427678 0.427773 0.427868 0.427963 +0.428058 0.428152 0.428247 0.428342 0.428437 0.428532 0.428627 0.428722 +0.428817 0.428912 0.429006 0.429101 0.429196 0.429291 0.429386 0.429481 +0.429576 0.429671 0.429766 0.429861 0.429956 0.430051 0.430146 0.43024 +0.430335 0.43043 0.430525 0.43062 0.430715 0.43081 0.430905 0.431 0.431095 +0.43119 0.431285 0.43138 0.431475 0.43157 0.431665 0.43176 0.431855 +0.43195 0.432045 0.43214 0.432235 0.43233 0.432425 0.43252 0.432615 +0.43271 0.432805 0.4329 0.432995 0.43309 0.433185 0.43328 0.433375 +0.43347 0.433565 0.43366 0.433755 0.43385 0.433945 0.43404 0.434135 +0.43423 0.434325 0.43442 0.434515 0.43461 0.434705 0.4348 0.434895 +0.43499 0.435085 0.435181 0.435276 0.435371 0.435466 0.435561 0.435656 +0.435751 0.435846 0.435941 0.436036 0.436131 0.436226 0.436321 0.436417 +0.436512 0.436607 0.436702 0.436797 0.436892 0.436987 0.437082 0.437177 +0.437273 0.437368 0.437463 0.437558 0.437653 0.437748 0.437843 0.437938 +0.438034 0.438129 0.438224 0.438319 0.438414 0.438509 0.438604 0.4387 +0.438795 0.43889 0.438985 0.43908 0.439175 0.43927 0.439366 0.439461 +0.439556 0.439651 0.439746 0.439841 0.439937 0.440032 0.440127 0.440222 +0.440317 0.440413 0.440508 0.440603 0.440698 0.440793 0.440889 0.440984 +0.441079 0.441174 0.441269 0.441365 0.44146 0.441555 0.44165 0.441745 +0.441841 0.441936 0.442031 0.442126 0.442222 0.442317 0.442412 0.442507 +0.442603 0.442698 0.442793 0.442888 0.442984 0.443079 0.443174 0.443269 +0.443365 0.44346 0.443555 0.44365 0.443746 0.443841 0.443936 0.444031 +0.444127 0.444222 0.444317 0.444412 0.444508 0.444603 0.444698 0.444794 +0.444889 0.444984 0.445079 0.445175 0.44527 0.445365 0.445461 0.445556 +0.445651 0.445747 0.445842 0.445937 0.446033 0.446128 0.446223 0.446318 +0.446414 0.446509 0.446604 0.4467 0.446795 0.44689 0.446986 0.447081 +0.447176 0.447272 0.447367 0.447462 0.447558 0.447653 0.447748 0.447844 +0.447939 0.448035 0.44813 0.448225 0.448321 0.448416 0.448511 0.448607 +0.448702 0.448797 0.448893 0.448988 0.449084 0.449179 0.449274 0.44937 +0.449465 0.44956 0.449656 0.449751 0.449847 0.449942 0.450037 0.450133 +0.450228 0.450324 0.450419 0.450514 0.45061 0.450705 0.450801 0.450896 +0.450991 0.451087 0.451182 0.451278 0.451373 0.451469 0.451564 0.451659 +0.451755 0.45185 0.451946 0.452041 0.452137 0.452232 0.452327 0.452423 +0.452518 0.452614 0.452709 0.452805 0.4529 0.452995 0.453091 0.453186 +0.453282 0.453377 0.453473 0.453568 0.453664 0.453759 0.453855 0.45395 +0.454046 0.454141 0.454236 0.454332 0.454427 0.454523 0.454618 0.454714 +0.454809 0.454905 0.455 0.455096 0.455191 0.455287 0.455382 0.455478 +0.455573 0.455669 0.455764 0.45586 0.455955 0.456051 0.456146 0.456242 +0.456337 0.456433 0.456528 0.456624 0.456719 0.456815 0.45691 0.457006 +0.457101 0.457197 0.457292 0.457388 0.457483 0.457579 0.457675 0.45777 +0.457866 0.457961 0.458057 0.458152 0.458248 0.458343 0.458439 0.458534 +0.45863 0.458725 0.458821 0.458917 0.459012 0.459108 0.459203 0.459299 +0.459394 0.45949 0.459585 0.459681 0.459777 0.459872 0.459968 0.460063 +0.460159 0.460254 0.46035 0.460445 0.460541 0.460637 0.460732 0.460828 +0.460923 0.461019 0.461115 0.46121 0.461306 0.461401 0.461497 0.461592 +0.461688 0.461784 0.461879 0.461975 0.46207 0.462166 0.462262 0.462357 +0.462453 0.462548 0.462644 0.46274 0.462835 0.462931 0.463026 0.463122 +0.463218 0.463313 0.463409 0.463505 0.4636 0.463696 0.463791 0.463887 +0.463983 0.464078 0.464174 0.46427 0.464365 0.464461 0.464556 0.464652 +0.464748 0.464843 0.464939 0.465035 0.46513 0.465226 0.465322 0.465417 +0.465513 0.465608 0.465704 0.4658 0.465895 0.465991 0.466087 0.466182 +0.466278 0.466374 0.466469 0.466565 0.466661 0.466756 0.466852 0.466948 +0.467043 0.467139 0.467235 0.46733 0.467426 0.467522 0.467617 0.467713 +0.467809 0.467904 0.468 0.468096 0.468191 0.468287 0.468383 0.468478 +0.468574 0.46867 0.468765 0.468861 0.468957 0.469053 0.469148 0.469244 +0.46934 0.469435 0.469531 0.469627 0.469722 0.469818 0.469914 0.47001 +0.470105 0.470201 0.470297 0.470392 0.470488 0.470584 0.470679 0.470775 +0.470871 0.470967 0.471062 0.471158 0.471254 0.471349 0.471445 0.471541 +0.471637 0.471732 0.471828 0.471924 0.472019 0.472115 0.472211 0.472307 +0.472402 0.472498 0.472594 0.47269 0.472785 0.472881 0.472977 0.473072 +0.473168 0.473264 0.47336 0.473455 0.473551 0.473647 0.473743 0.473838 +0.473934 0.47403 0.474126 0.474221 0.474317 0.474413 0.474509 0.474604 +0.4747 0.474796 0.474892 0.474987 0.475083 0.475179 0.475275 0.47537 +0.475466 0.475562 0.475658 0.475753 0.475849 0.475945 0.476041 0.476137 +0.476232 0.476328 0.476424 0.47652 0.476615 0.476711 0.476807 0.476903 +0.476998 0.477094 0.47719 0.477286 0.477381 0.477477 0.477573 0.477669 +0.477765 0.47786 0.477956 0.478052 0.478148 0.478244 0.478339 0.478435 +0.478531 0.478627 0.478722 0.478818 0.478914 0.47901 0.479106 0.479201 +0.479297 0.479393 0.479489 0.479585 0.47968 0.479776 0.479872 0.479968 +0.480064 0.480159 0.480255 0.480351 0.480447 0.480543 0.480638 0.480734 +0.48083 0.480926 0.481022 0.481117 0.481213 0.481309 0.481405 0.481501 +; +#A 8000 0.481596 0.481692 0.481788 0.481884 0.48198 0.482075 0.482171 +0.482267 0.482363 0.482459 0.482554 0.48265 0.482746 0.482842 0.482938 +0.483034 0.483129 0.483225 0.483321 0.483417 0.483513 0.483609 0.483704 +0.4838 0.483896 0.483992 0.484088 0.484183 0.484279 0.484375 0.484471 +0.484567 0.484663 0.484758 0.484854 0.48495 0.485046 0.485142 0.485238 +0.485333 0.485429 0.485525 0.485621 0.485717 0.485813 0.485908 0.486004 +0.4861 0.486196 0.486292 0.486388 0.486483 0.486579 0.486675 0.486771 +0.486867 0.486963 0.487058 0.487154 0.48725 0.487346 0.487442 0.487538 +0.487634 0.487729 0.487825 0.487921 0.488017 0.488113 0.488209 0.488304 +0.4884 0.488496 0.488592 0.488688 0.488784 0.48888 0.488975 0.489071 +0.489167 0.489263 0.489359 0.489455 0.489551 0.489646 0.489742 0.489838 +0.489934 0.49003 0.490126 0.490222 0.490317 0.490413 0.490509 0.490605 +0.490701 0.490797 0.490892 0.490988 0.491084 0.49118 0.491276 0.491372 +0.491468 0.491563 0.491659 0.491755 0.491851 0.491947 0.492043 0.492139 +0.492235 0.49233 0.492426 0.492522 0.492618 0.492714 0.49281 0.492906 +0.493001 0.493097 0.493193 0.493289 0.493385 0.493481 0.493577 0.493672 +0.493768 0.493864 0.49396 0.494056 0.494152 0.494248 0.494344 0.494439 +0.494535 0.494631 0.494727 0.494823 0.494919 0.495015 0.495111 0.495206 +0.495302 0.495398 0.495494 0.49559 0.495686 0.495782 0.495877 0.495973 +0.496069 0.496165 0.496261 0.496357 0.496453 0.496549 0.496644 0.49674 +0.496836 0.496932 0.497028 0.497124 0.49722 0.497316 0.497411 0.497507 +0.497603 0.497699 0.497795 0.497891 0.497987 0.498083 0.498178 0.498274 +0.49837 0.498466 0.498562 0.498658 0.498754 0.49885 0.498945 0.499041 +0.499137 0.499233 0.499329 0.499425 0.499521 0.499617 0.499712 0.499808 +0.499904 0.5 0.500096 0.500192 0.500288 0.500383 0.500479 0.500575 +0.500671 0.500767 0.500863 0.500959 0.501055 0.50115 0.501246 0.501342 +0.501438 0.501534 0.50163 0.501726 0.501822 0.501917 0.502013 0.502109 +0.502205 0.502301 0.502397 0.502493 0.502589 0.502684 0.50278 0.502876 +0.502972 0.503068 0.503164 0.50326 0.503356 0.503451 0.503547 0.503643 +0.503739 0.503835 0.503931 0.504027 0.504123 0.504218 0.504314 0.50441 +0.504506 0.504602 0.504698 0.504794 0.504889 0.504985 0.505081 0.505177 +0.505273 0.505369 0.505465 0.505561 0.505656 0.505752 0.505848 0.505944 +0.50604 0.506136 0.506232 0.506328 0.506423 0.506519 0.506615 0.506711 +0.506807 0.506903 0.506999 0.507094 0.50719 0.507286 0.507382 0.507478 +0.507574 0.50767 0.507765 0.507861 0.507957 0.508053 0.508149 0.508245 +0.508341 0.508437 0.508532 0.508628 0.508724 0.50882 0.508916 0.509012 +0.509108 0.509203 0.509299 0.509395 0.509491 0.509587 0.509683 0.509778 +0.509874 0.50997 0.510066 0.510162 0.510258 0.510354 0.510449 0.510545 +0.510641 0.510737 0.510833 0.510929 0.511025 0.51112 0.511216 0.511312 +0.511408 0.511504 0.5116 0.511696 0.511791 0.511887 0.511983 0.512079 +0.512175 0.512271 0.512366 0.512462 0.512558 0.512654 0.51275 0.512846 +0.512942 0.513037 0.513133 0.513229 0.513325 0.513421 0.513517 0.513612 +0.513708 0.513804 0.5139 0.513996 0.514092 0.514187 0.514283 0.514379 +0.514475 0.514571 0.514667 0.514762 0.514858 0.514954 0.51505 0.515146 +0.515242 0.515337 0.515433 0.515529 0.515625 0.515721 0.515817 0.515912 +0.516008 0.516104 0.5162 0.516296 0.516391 0.516487 0.516583 0.516679 +0.516775 0.516871 0.516966 0.517062 0.517158 0.517254 0.51735 0.517446 +0.517541 0.517637 0.517733 0.517829 0.517925 0.51802 0.518116 0.518212 +0.518308 0.518404 0.518499 0.518595 0.518691 0.518787 0.518883 0.518978 +0.519074 0.51917 0.519266 0.519362 0.519457 0.519553 0.519649 0.519745 +0.519841 0.519936 0.520032 0.520128 0.520224 0.52032 0.520415 0.520511 +0.520607 0.520703 0.520799 0.520894 0.52099 0.521086 0.521182 0.521278 +0.521373 0.521469 0.521565 0.521661 0.521756 0.521852 0.521948 0.522044 +0.52214 0.522235 0.522331 0.522427 0.522523 0.522618 0.522714 0.52281 +0.522906 0.523002 0.523097 0.523193 0.523289 0.523385 0.52348 0.523576 +0.523672 0.523768 0.523863 0.523959 0.524055 0.524151 0.524247 0.524342 +0.524438 0.524534 0.52463 0.524725 0.524821 0.524917 0.525013 0.525108 +0.525204 0.5253 0.525396 0.525491 0.525587 0.525683 0.525779 0.525874 +0.52597 0.526066 0.526162 0.526257 0.526353 0.526449 0.526545 0.52664 +0.526736 0.526832 0.526928 0.527023 0.527119 0.527215 0.52731 0.527406 +0.527502 0.527598 0.527693 0.527789 0.527885 0.527981 0.528076 0.528172 +0.528268 0.528363 0.528459 0.528555 0.528651 0.528746 0.528842 0.528938 +0.529033 0.529129 0.529225 0.529321 0.529416 0.529512 0.529608 0.529703 +0.529799 0.529895 0.52999 0.530086 0.530182 0.530278 0.530373 0.530469 +0.530565 0.53066 0.530756 0.530852 0.530947 0.531043 0.531139 0.531235 +0.53133 0.531426 0.531522 0.531617 0.531713 0.531809 0.531904 0.532 +0.532096 0.532191 0.532287 0.532383 0.532478 0.532574 0.53267 0.532765 +0.532861 0.532957 0.533052 0.533148 0.533244 0.533339 0.533435 0.533531 +0.533626 0.533722 0.533818 0.533913 0.534009 0.534105 0.5342 0.534296 +0.534392 0.534487 0.534583 0.534678 0.534774 0.53487 0.534965 0.535061 +0.535157 0.535252 0.535348 0.535444 0.535539 0.535635 0.53573 0.535826 +0.535922 0.536017 0.536113 0.536209 0.536304 0.5364 0.536495 0.536591 +0.536687 0.536782 0.536878 0.536974 0.537069 0.537165 0.53726 0.537356 +0.537452 0.537547 0.537643 0.537738 0.537834 0.53793 0.538025 0.538121 +0.538216 0.538312 0.538408 0.538503 0.538599 0.538694 0.53879 0.538885 +0.538981 0.539077 0.539172 0.539268 0.539363 0.539459 0.539554 0.53965 +0.539746 0.539841 0.539937 0.540032 0.540128 0.540223 0.540319 0.540415 +0.54051 0.540606 0.540701 0.540797 0.540892 0.540988 0.541084 0.541179 +0.541275 0.54137 0.541466 0.541561 0.541657 0.541752 0.541848 0.541943 +0.542039 0.542134 0.54223 0.542325 0.542421 0.542517 0.542612 0.542708 +0.542803 0.542899 0.542994 0.54309 0.543185 0.543281 0.543376 0.543472 +0.543567 0.543663 0.543758 0.543854 0.543949 0.544045 0.54414 0.544236 +0.544331 0.544427 0.544522 0.544618 0.544713 0.544809 0.544904 0.545 +0.545095 0.545191 0.545286 0.545382 0.545477 0.545573 0.545668 0.545764 +0.545859 0.545954 0.54605 0.546145 0.546241 0.546336 0.546432 0.546527 +0.546623 0.546718 0.546814 0.546909 0.547005 0.5471 0.547195 0.547291 +0.547386 0.547482 0.547577 0.547673 0.547768 0.547863 0.547959 0.548054 +0.54815 0.548245 0.548341 0.548436 0.548531 0.548627 0.548722 0.548818 +0.548913 0.549009 0.549104 0.549199 0.549295 0.54939 0.549486 0.549581 +0.549676 0.549772 0.549867 0.549963 0.550058 0.550153 0.550249 0.550344 +0.55044 0.550535 0.55063 0.550726 0.550821 0.550916 0.551012 0.551107 +0.551203 0.551298 0.551393 0.551489 0.551584 0.551679 0.551775 0.55187 +0.551965 0.552061 0.552156 0.552252 0.552347 0.552442 0.552538 0.552633 +0.552728 0.552824 0.552919 0.553014 0.55311 0.553205 0.5533 0.553396 +0.553491 0.553586 0.553682 0.553777 0.553872 0.553967 0.554063 0.554158 +0.554253 0.554349 0.554444 0.554539 0.554635 0.55473 0.554825 0.55492 +0.555016 0.555111 0.555206 0.555302 0.555397 0.555492 0.555588 0.555683 +0.555778 0.555873 0.555969 0.556064 0.556159 0.556254 0.55635 0.556445 +0.55654 0.556635 0.556731 0.556826 0.556921 0.557016 0.557112 0.557207 +0.557302 0.557397 0.557493 0.557588 0.557683 0.557778 0.557874 0.557969 +0.558064 0.558159 0.558255 0.55835 0.558445 0.55854 0.558635 0.558731 +0.558826 0.558921 0.559016 0.559111 0.559207 0.559302 0.559397 0.559492 +0.559587 0.559683 0.559778 0.559873 0.559968 0.560063 0.560159 0.560254 +0.560349 0.560444 0.560539 0.560634 0.56073 0.560825 0.56092 0.561015 +0.56111 0.561205 0.561301 0.561396 0.561491 0.561586 0.561681 0.561776 +0.561871 0.561966 0.562062 0.562157 0.562252 0.562347 0.562442 0.562537 +0.562632 0.562728 0.562823 0.562918 0.563013 0.563108 0.563203 0.563298 +0.563393 0.563488 0.563583 0.563679 0.563774 0.563869 0.563964 0.564059 +0.564154 0.564249 0.564344 0.564439 0.564534 0.564629 0.564724 0.56482 +0.564915 0.56501 0.565105 0.5652 0.565295 0.56539 0.565485 0.56558 +0.565675 0.56577 0.565865 0.56596 0.566055 0.56615 0.566245 0.56634 +0.566435 0.56653 0.566625 0.56672 0.566815 0.56691 0.567005 0.5671 +0.567195 0.56729 0.567385 0.56748 0.567575 0.56767 0.567765 0.56786 +0.567955 0.56805 0.568145 0.56824 0.568335 0.56843 0.568525 0.56862 +0.568715 0.56881 0.568905 0.569 0.569095 0.56919 0.569285 0.56938 0.569475 +0.56957 0.569665 0.56976 0.569854 0.569949 0.570044 0.570139 0.570234 +0.570329 0.570424 0.570519 0.570614 0.570709 0.570804 0.570899 0.570993 +0.571088 0.571183 0.571278 0.571373 0.571468 0.571563 0.571658 0.571753 +0.571847 0.571942 0.572037 0.572132 0.572227 0.572322 0.572417 0.572512 +0.572606 0.572701 0.572796 0.572891 0.572986 0.573081 0.573176 0.57327 +0.573365 0.57346 0.573555 0.57365 0.573745 0.573839 0.573934 0.574029 +0.574124 0.574219 0.574313 0.574408 0.574503 0.574598 0.574693 0.574787 +0.574882 0.574977 0.575072 0.575167 0.575261 0.575356 0.575451 0.575546 +0.57564 0.575735 0.57583 0.575925 0.57602 0.576114 0.576209 0.576304 +0.576399 0.576493 0.576588 0.576683 0.576778 0.576872 0.576967 0.577062 +; +#A 9000 0.577156 0.577251 0.577346 0.577441 0.577535 0.57763 0.577725 +0.577819 0.577914 0.578009 0.578104 0.578198 0.578293 0.578388 0.578482 +0.578577 0.578672 0.578766 0.578861 0.578956 0.57905 0.579145 0.57924 +0.579334 0.579429 0.579524 0.579618 0.579713 0.579808 0.579902 0.579997 +0.580092 0.580186 0.580281 0.580375 0.58047 0.580565 0.580659 0.580754 +0.580849 0.580943 0.581038 0.581132 0.581227 0.581322 0.581416 0.581511 +0.581605 0.5817 0.581795 0.581889 0.581984 0.582078 0.582173 0.582267 +0.582362 0.582457 0.582551 0.582646 0.58274 0.582835 0.582929 0.583024 +0.583118 0.583213 0.583308 0.583402 0.583497 0.583591 0.583686 0.58378 +0.583875 0.583969 0.584064 0.584158 0.584253 0.584347 0.584442 0.584536 +0.584631 0.584725 0.58482 0.584914 0.585009 0.585103 0.585198 0.585292 +0.585386 0.585481 0.585575 0.58567 0.585764 0.585859 0.585953 0.586048 +0.586142 0.586237 0.586331 0.586425 0.58652 0.586614 0.586709 0.586803 +0.586898 0.586992 0.587086 0.587181 0.587275 0.58737 0.587464 0.587558 +0.587653 0.587747 0.587842 0.587936 0.58803 0.588125 0.588219 0.588313 +0.588408 0.588502 0.588596 0.588691 0.588785 0.58888 0.588974 0.589068 +0.589163 0.589257 0.589351 0.589446 0.58954 0.589634 0.589729 0.589823 +0.589917 0.590011 0.590106 0.5902 0.590294 0.590389 0.590483 0.590577 +0.590672 0.590766 0.59086 0.590954 0.591049 0.591143 0.591237 0.591331 +0.591426 0.59152 0.591614 0.591708 0.591803 0.591897 0.591991 0.592085 +0.59218 0.592274 0.592368 0.592462 0.592557 0.592651 0.592745 0.592839 +0.592933 0.593028 0.593122 0.593216 0.59331 0.593404 0.593499 0.593593 +0.593687 0.593781 0.593875 0.593969 0.594064 0.594158 0.594252 0.594346 +0.59444 0.594534 0.594628 0.594723 0.594817 0.594911 0.595005 0.595099 +0.595193 0.595287 0.595381 0.595476 0.59557 0.595664 0.595758 0.595852 +0.595946 0.59604 0.596134 0.596228 0.596322 0.596417 0.596511 0.596605 +0.596699 0.596793 0.596887 0.596981 0.597075 0.597169 0.597263 0.597357 +0.597451 0.597545 0.597639 0.597733 0.597827 0.597921 0.598015 0.598109 +0.598203 0.598297 0.598391 0.598485 0.598579 0.598673 0.598767 0.598861 +0.598955 0.599049 0.599143 0.599237 0.599331 0.599425 0.599519 0.599613 +0.599707 0.599801 0.599895 0.599989 0.600083 0.600177 0.600271 0.600365 +0.600458 0.600552 0.600646 0.60074 0.600834 0.600928 0.601022 0.601116 +0.60121 0.601304 0.601397 0.601491 0.601585 0.601679 0.601773 0.601867 +0.601961 0.602054 0.602148 0.602242 0.602336 0.60243 0.602524 0.602618 +0.602711 0.602805 0.602899 0.602993 0.603087 0.60318 0.603274 0.603368 +0.603462 0.603556 0.603649 0.603743 0.603837 0.603931 0.604025 0.604118 +0.604212 0.604306 0.6044 0.604493 0.604587 0.604681 0.604775 0.604868 +0.604962 0.605056 0.60515 0.605243 0.605337 0.605431 0.605525 0.605618 +0.605712 0.605806 0.605899 0.605993 0.606087 0.60618 0.606274 0.606368 +0.606461 0.606555 0.606649 0.606743 0.606836 0.60693 0.607023 0.607117 +0.607211 0.607304 0.607398 0.607492 0.607585 0.607679 0.607773 0.607866 +0.60796 0.608053 0.608147 0.608241 0.608334 0.608428 0.608521 0.608615 +0.608709 0.608802 0.608896 0.608989 0.609083 0.609176 0.60927 0.609363 +0.609457 0.609551 0.609644 0.609738 0.609831 0.609925 0.610018 0.610112 +0.610205 0.610299 0.610392 0.610486 0.610579 0.610673 0.610766 0.61086 +0.610953 0.611047 0.61114 0.611234 0.611327 0.611421 0.611514 0.611608 +0.611701 0.611795 0.611888 0.611981 0.612075 0.612168 0.612262 0.612355 +0.612449 0.612542 0.612635 0.612729 0.612822 0.612916 0.613009 0.613102 +0.613196 0.613289 0.613383 0.613476 0.613569 0.613663 0.613756 0.613849 +0.613943 0.614036 0.614129 0.614223 0.614316 0.614409 0.614503 0.614596 +0.614689 0.614783 0.614876 0.614969 0.615063 0.615156 0.615249 0.615342 +0.615436 0.615529 0.615622 0.615716 0.615809 0.615902 0.615995 0.616089 +0.616182 0.616275 0.616368 0.616462 0.616555 0.616648 0.616741 0.616835 +0.616928 0.617021 0.617114 0.617207 0.617301 0.617394 0.617487 0.61758 +0.617673 0.617767 0.61786 0.617953 0.618046 0.618139 0.618232 0.618326 +0.618419 0.618512 0.618605 0.618698 0.618791 0.618884 0.618977 0.619071 +0.619164 0.619257 0.61935 0.619443 0.619536 0.619629 0.619722 0.619815 +0.619908 0.620001 0.620095 0.620188 0.620281 0.620374 0.620467 0.62056 +0.620653 0.620746 0.620839 0.620932 0.621025 0.621118 0.621211 0.621304 +0.621397 0.62149 0.621583 0.621676 0.621769 0.621862 0.621955 0.622048 +0.622141 0.622234 0.622327 0.62242 0.622513 0.622606 0.622699 0.622792 +0.622885 0.622978 0.62307 0.623163 0.623256 0.623349 0.623442 0.623535 +0.623628 0.623721 0.623814 0.623907 0.623999 0.624092 0.624185 0.624278 +0.624371 0.624464 0.624557 0.62465 0.624742 0.624835 0.624928 0.625021 +0.625114 0.625207 0.625299 0.625392 0.625485 0.625578 0.625671 0.625763 +0.625856 0.625949 0.626042 0.626134 0.626227 0.62632 0.626413 0.626505 +0.626598 0.626691 0.626784 0.626876 0.626969 0.627062 0.627155 0.627247 +0.62734 0.627433 0.627526 0.627618 0.627711 0.627804 0.627896 0.627989 +0.628082 0.628174 0.628267 0.62836 0.628452 0.628545 0.628638 0.62873 +0.628823 0.628916 0.629008 0.629101 0.629193 0.629286 0.629379 0.629471 +0.629564 0.629656 0.629749 0.629842 0.629934 0.630027 0.630119 0.630212 +0.630305 0.630397 0.63049 0.630582 0.630675 0.630767 0.63086 0.630952 +0.631045 0.631137 0.63123 0.631322 0.631415 0.631507 0.6316 0.631692 +0.631785 0.631877 0.63197 0.632062 0.632155 0.632247 0.63234 0.632432 +0.632525 0.632617 0.632709 0.632802 0.632894 0.632987 0.633079 0.633172 +0.633264 0.633356 0.633449 0.633541 0.633634 0.633726 0.633818 0.633911 +0.634003 0.634095 0.634188 0.63428 0.634372 0.634465 0.634557 0.63465 +0.634742 0.634834 0.634926 0.635019 0.635111 0.635203 0.635296 0.635388 +0.63548 0.635573 0.635665 0.635757 0.635849 0.635942 0.636034 0.636126 +0.636218 0.636311 0.636403 0.636495 0.636587 0.63668 0.636772 0.636864 +0.636956 0.637048 0.637141 0.637233 0.637325 0.637417 0.637509 0.637602 +0.637694 0.637786 0.637878 0.63797 0.638062 0.638155 0.638247 0.638339 +0.638431 0.638523 0.638615 0.638707 0.638799 0.638891 0.638984 0.639076 +0.639168 0.63926 0.639352 0.639444 0.639536 0.639628 0.63972 0.639812 +0.639904 0.639996 0.640088 0.64018 0.640272 0.640364 0.640456 0.640548 +0.64064 0.640732 0.640824 0.640916 0.641008 0.6411 0.641192 0.641284 +0.641376 0.641468 0.64156 0.641652 0.641744 0.641836 0.641928 0.64202 +0.642112 0.642204 0.642296 0.642388 0.642479 0.642571 0.642663 0.642755 +0.642847 0.642939 0.643031 0.643123 0.643215 0.643306 0.643398 0.64349 +0.643582 0.643674 0.643766 0.643857 0.643949 0.644041 0.644133 0.644225 +0.644316 0.644408 0.6445 0.644592 0.644684 0.644775 0.644867 0.644959 +0.645051 0.645142 0.645234 0.645326 0.645418 0.645509 0.645601 0.645693 +0.645784 0.645876 0.645968 0.64606 0.646151 0.646243 0.646335 0.646426 +0.646518 0.64661 0.646701 0.646793 0.646885 0.646976 0.647068 0.647159 +0.647251 0.647343 0.647434 0.647526 0.647618 0.647709 0.647801 0.647892 +0.647984 0.648075 0.648167 0.648259 0.64835 0.648442 0.648533 0.648625 +0.648716 0.648808 0.648899 0.648991 0.649082 0.649174 0.649265 0.649357 +0.649448 0.64954 0.649631 0.649723 0.649814 0.649906 0.649997 0.650089 +0.65018 0.650272 0.650363 0.650455 0.650546 0.650637 0.650729 0.65082 +0.650912 0.651003 0.651094 0.651186 0.651277 0.651368 0.65146 0.651551 +0.651643 0.651734 0.651825 0.651917 0.652008 0.652099 0.652191 0.652282 +0.652373 0.652465 0.652556 0.652647 0.652739 0.65283 0.652921 0.653012 +0.653104 0.653195 0.653286 0.653377 0.653469 0.65356 0.653651 0.653742 +0.653834 0.653925 0.654016 0.654107 0.654198 0.65429 0.654381 0.654472 +0.654563 0.654654 0.654746 0.654837 0.654928 0.655019 0.65511 0.655201 +0.655292 0.655384 0.655475 0.655566 0.655657 0.655748 0.655839 0.65593 +0.656021 0.656112 0.656204 0.656295 0.656386 0.656477 0.656568 0.656659 +0.65675 0.656841 0.656932 0.657023 0.657114 0.657205 0.657296 0.657387 +0.657478 0.657569 0.65766 0.657751 0.657842 0.657933 0.658024 0.658115 +0.658206 0.658297 0.658388 0.658479 0.65857 0.65866 0.658751 0.658842 +0.658933 0.659024 0.659115 0.659206 0.659297 0.659388 0.659478 0.659569 +0.65966 0.659751 0.659842 0.659933 0.660024 0.660114 0.660205 0.660296 +0.660387 0.660478 0.660568 0.660659 0.66075 0.660841 0.660932 0.661022 +0.661113 0.661204 0.661295 0.661385 0.661476 0.661567 0.661658 0.661748 +0.661839 0.66193 0.66202 0.662111 0.662202 0.662292 0.662383 0.662474 +0.662564 0.662655 0.662746 0.662836 0.662927 0.663018 0.663108 0.663199 +0.66329 0.66338 0.663471 0.663561 0.663652 0.663743 0.663833 0.663924 +0.664014 0.664105 0.664195 0.664286 0.664377 0.664467 0.664558 0.664648 +0.664739 0.664829 0.66492 0.66501 0.665101 0.665191 0.665282 0.665372 +0.665463 0.665553 0.665644 0.665734 0.665825 0.665915 0.666005 0.666096 +0.666186 0.666277 0.666367 0.666458 0.666548 0.666638 0.666729 0.666819 +0.666909 0.667 0.66709 0.667181 0.667271 0.667361 0.667452 0.667542 +0.667632 0.667723 0.667813 0.667903 0.667993 0.668084 0.668174 0.668264 +0.668355 0.668445 0.668535 0.668625 0.668716 0.668806 0.668896 0.668986 +0.669077 0.669167 0.669257 0.669347 0.669438 0.669528 0.669618 0.669708 +0.669798; +#A 10000 0.669888 0.669979 0.670069 0.670159 0.670249 0.670339 0.670429 +0.670519 0.67061 0.6707 0.67079 0.67088 0.67097 0.67106 0.67115 0.67124 +0.67133 0.67142 0.67151 0.671601 0.671691 0.671781 0.671871 0.671961 +0.672051 0.672141 0.672231 0.672321 0.672411 0.672501 0.672591 0.672681 +0.672771 0.672861 0.672951 0.673041 0.673131 0.67322 0.67331 0.6734 +0.67349 0.67358 0.67367 0.67376 0.67385 0.67394 0.67403 0.674119 0.674209 +0.674299 0.674389 0.674479 0.674569 0.674659 0.674748 0.674838 0.674928 +0.675018 0.675108 0.675197 0.675287 0.675377 0.675467 0.675557 0.675646 +0.675736 0.675826 0.675916 0.676005 0.676095 0.676185 0.676275 0.676364 +0.676454 0.676544 0.676633 0.676723 0.676813 0.676902 0.676992 0.677082 +0.677171 0.677261 0.677351 0.67744 0.67753 0.67762 0.677709 0.677799 +0.677888 0.677978 0.678068 0.678157 0.678247 0.678336 0.678426 0.678515 +0.678605 0.678695 0.678784 0.678874 0.678963 0.679053 0.679142 0.679232 +0.679321 0.679411 0.6795 0.67959 0.679679 0.679769 0.679858 0.679947 +0.680037 0.680126 0.680216 0.680305 0.680395 0.680484 0.680574 0.680663 +0.680752 0.680842 0.680931 0.68102 0.68111 0.681199 0.681289 0.681378 +0.681467 0.681557 0.681646 0.681735 0.681825 0.681914 0.682003 0.682092 +0.682182 0.682271 0.68236 0.68245 0.682539 0.682628 0.682717 0.682806 +0.682896 0.682985 0.683074 0.683163 0.683253 0.683342 0.683431 0.68352 +0.683609 0.683699 0.683788 0.683877 0.683966 0.684055 0.684144 0.684233 +0.684323 0.684412 0.684501 0.68459 0.684679 0.684768 0.684857 0.684946 +0.685035 0.685124 0.685213 0.685302 0.685391 0.685481 0.68557 0.685659 +0.685748 0.685837 0.685926 0.686015 0.686104 0.686193 0.686282 0.686371 +0.686459 0.686548 0.686637 0.686726 0.686815 0.686904 0.686993 0.687082 +0.687171 0.68726 0.687349 0.687438 0.687527 0.687615 0.687704 0.687793 +0.687882 0.687971 0.68806 0.688148 0.688237 0.688326 0.688415 0.688504 +0.688592 0.688681 0.68877 0.688859 0.688948 0.689036 0.689125 0.689214 +0.689303 0.689391 0.68948 0.689569 0.689658 0.689746 0.689835 0.689924 +0.690012 0.690101 0.69019 0.690278 0.690367 0.690456 0.690544 0.690633 +0.690722 0.69081 0.690899 0.690987 0.691076 0.691165 0.691253 0.691342 +0.69143 0.691519 0.691607 0.691696 0.691785 0.691873 0.691962 0.69205 +0.692139 0.692227 0.692316 0.692404 0.692493 0.692581 0.69267 0.692758 +0.692846 0.692935 0.693023 0.693112 0.6932 0.693289 0.693377 0.693466 +0.693554 0.693642 0.693731 0.693819 0.693907 0.693996 0.694084 0.694173 +0.694261 0.694349 0.694438 0.694526 0.694614 0.694703 0.694791 0.694879 +0.694967 0.695056 0.695144 0.695232 0.69532 0.695409 0.695497 0.695585 +0.695673 0.695762 0.69585 0.695938 0.696026 0.696114 0.696203 0.696291 +0.696379 0.696467 0.696555 0.696643 0.696732 0.69682 0.696908 0.696996 +0.697084 0.697172 0.69726 0.697348 0.697437 0.697525 0.697613 0.697701 +0.697789 0.697877 0.697965 0.698053 0.698141 0.698229 0.698317 0.698405 +0.698493 0.698581 0.698669 0.698757 0.698845 0.698933 0.699021 0.699109 +0.699197 0.699285 0.699373 0.699461 0.699548 0.699636 0.699724 0.699812 +0.6999 0.699988 0.700076 0.700164 0.700251 0.700339 0.700427 0.700515 +0.700603 0.700691 0.700778 0.700866 0.700954 0.701042 0.70113 0.701217 +0.701305 0.701393 0.701481 0.701568 0.701656 0.701744 0.701832 0.701919 +0.702007 0.702095 0.702182 0.70227 0.702358 0.702445 0.702533 0.702621 +0.702708 0.702796 0.702884 0.702971 0.703059 0.703146 0.703234 0.703322 +0.703409 0.703497 0.703584 0.703672 0.703759 0.703847 0.703935 0.704022 +0.70411 0.704197 0.704285 0.704372 0.70446 0.704547 0.704635 0.704722 +0.70481 0.704897 0.704984 0.705072 0.705159 0.705247 0.705334 0.705422 +0.705509 0.705596 0.705684 0.705771 0.705859 0.705946 0.706033 0.706121 +0.706208 0.706295 0.706383 0.70647 0.706557 0.706645 0.706732 0.706819 +0.706906 0.706994 0.707081 0.707168 0.707255 0.707343 0.70743 0.707517 +0.707604 0.707692 0.707779 0.707866 0.707953 0.70804 0.708128 0.708215 +0.708302 0.708389 0.708476 0.708563 0.708651 0.708738 0.708825 0.708912 +0.708999 0.709086 0.709173 0.70926 0.709347 0.709434 0.709521 0.709608 +0.709695 0.709783 0.70987 0.709957 0.710044 0.710131 0.710218 0.710305 +0.710392 0.710478 0.710565 0.710652 0.710739 0.710826 0.710913 0.711 +0.711087 0.711174 0.711261 0.711348 0.711435 0.711522 0.711608 0.711695 +0.711782 0.711869 0.711956 0.712043 0.712129 0.712216 0.712303 0.71239 +0.712477 0.712563 0.71265 0.712737 0.712824 0.71291 0.712997 0.713084 +0.713171 0.713257 0.713344 0.713431 0.713517 0.713604 0.713691 0.713778 +0.713864 0.713951 0.714038 0.714124 0.714211 0.714297 0.714384 0.714471 +0.714557 0.714644 0.71473 0.714817 0.714904 0.71499 0.715077 0.715163 +0.71525 0.715336 0.715423 0.715509 0.715596 0.715682 0.715769 0.715855 +0.715942 0.716028 0.716115 0.716201 0.716288 0.716374 0.71646 0.716547 +0.716633 0.71672 0.716806 0.716892 0.716979 0.717065 0.717152 0.717238 +0.717324 0.717411 0.717497 0.717583 0.71767 0.717756 0.717842 0.717929 +0.718015 0.718101 0.718187 0.718274 0.71836 0.718446 0.718532 0.718619 +0.718705 0.718791 0.718877 0.718963 0.71905 0.719136 0.719222 0.719308 +0.719394 0.71948 0.719567 0.719653 0.719739 0.719825 0.719911 0.719997 +0.720083 0.720169 0.720255 0.720341 0.720428 0.720514 0.7206 0.720686 +0.720772 0.720858 0.720944 0.72103 0.721116 0.721202 0.721288 0.721374 +0.72146 0.721546 0.721631 0.721717 0.721803 0.721889 0.721975 0.722061 +0.722147 0.722233 0.722319 0.722405 0.72249 0.722576 0.722662 0.722748 +0.722834 0.72292 0.723005 0.723091 0.723177 0.723263 0.723349 0.723434 +0.72352 0.723606 0.723692 0.723777 0.723863 0.723949 0.724035 0.72412 +0.724206 0.724292 0.724377 0.724463 0.724549 0.724634 0.72472 0.724806 +0.724891 0.724977 0.725063 0.725148 0.725234 0.725319 0.725405 0.725491 +0.725576 0.725662 0.725747 0.725833 0.725918 0.726004 0.726089 0.726175 +0.72626 0.726346 0.726431 0.726517 0.726602 0.726688 0.726773 0.726859 +0.726944 0.727029 0.727115 0.7272 0.727286 0.727371 0.727456 0.727542 +0.727627 0.727713 0.727798 0.727883 0.727969 0.728054 0.728139 0.728225 +0.72831 0.728395 0.72848 0.728566 0.728651 0.728736 0.728821 0.728907 +0.728992 0.729077 0.729162 0.729248 0.729333 0.729418 0.729503 0.729588 +0.729673 0.729759 0.729844 0.729929 0.730014 0.730099 0.730184 0.730269 +0.730354 0.73044 0.730525 0.73061 0.730695 0.73078 0.730865 0.73095 +0.731035 0.73112 0.731205 0.73129 0.731375 0.73146 0.731545 0.73163 +0.731715 0.7318 0.731885 0.73197 0.732055 0.73214 0.732224 0.732309 +0.732394 0.732479 0.732564 0.732649 0.732734 0.732819 0.732903 0.732988 +0.733073 0.733158 0.733243 0.733328 0.733412 0.733497 0.733582 0.733667 +0.733751 0.733836 0.733921 0.734006 0.73409 0.734175 0.73426 0.734344 +0.734429 0.734514 0.734598 0.734683 0.734768 0.734852 0.734937 0.735022 +0.735106 0.735191 0.735276 0.73536 0.735445 0.735529 0.735614 0.735698 +0.735783 0.735867 0.735952 0.736037 0.736121 0.736206 0.73629 0.736374 +0.736459 0.736543 0.736628 0.736712 0.736797 0.736881 0.736966 0.73705 +0.737135 0.737219 0.737303 0.737388 0.737472 0.737556 0.737641 0.737725 +0.737809 0.737894 0.737978 0.738062 0.738147 0.738231 0.738315 0.7384 +0.738484 0.738568 0.738652 0.738737 0.738821 0.738905 0.738989 0.739074 +0.739158 0.739242 0.739326 0.73941 0.739494 0.739579 0.739663 0.739747 +0.739831 0.739915 0.739999 0.740083 0.740167 0.740252 0.740336 0.74042 +0.740504 0.740588 0.740672 0.740756 0.74084 0.740924 0.741008 0.741092 +0.741176 0.74126 0.741344 0.741428 0.741512 0.741596 0.74168 0.741764 +0.741847 0.741931 0.742015 0.742099 0.742183 0.742267 0.742351 0.742435 +0.742518 0.742602 0.742686 0.74277 0.742854 0.742938 0.743021 0.743105 +0.743189 0.743273 0.743356 0.74344 0.743524 0.743608 0.743691 0.743775 +0.743859 0.743942 0.744026 0.74411 0.744193 0.744277 0.744361 0.744444 +0.744528 0.744612 0.744695 0.744779 0.744862 0.744946 0.74503 0.745113 +0.745197 0.74528 0.745364 0.745447 0.745531 0.745614 0.745698 0.745781 +0.745865 0.745948 0.746032 0.746115 0.746199 0.746282 0.746366 0.746449 +0.746532 0.746616 0.746699 0.746783 0.746866 0.746949 0.747033 0.747116 +0.747199 0.747283 0.747366 0.747449 0.747533 0.747616 0.747699 0.747783 +0.747866 0.747949 0.748032 0.748116 0.748199 0.748282 0.748365 0.748449 +0.748532 0.748615 0.748698 0.748781 0.748864 0.748948 0.749031 0.749114 +0.749197 0.74928 0.749363 0.749446 0.749529 0.749612 0.749695 0.749779 +0.749862 0.749945 0.750028 0.750111 0.750194 0.750277 0.75036 0.750443 +0.750526 0.750609 0.750692 0.750775 0.750857 0.75094 0.751023 0.751106 +0.751189 0.751272 0.751355 0.751438 0.751521 0.751603 0.751686 0.751769 +0.751852 0.751935 0.752018 0.7521 0.752183 0.752266 0.752349 0.752432 +0.752514 0.752597 0.75268 0.752762 0.752845 0.752928 0.753011 0.753093 +0.753176 0.753259 0.753341 0.753424 0.753507 0.753589 0.753672 0.753754 +0.753837 0.75392 0.754002 0.754085 0.754167 0.75425 0.754333 0.754415 +0.754498 0.75458 0.754663 0.754745 0.754828 0.75491 0.754993 0.755075 +0.755158 0.75524 0.755322 0.755405 0.755487 0.75557 0.755652 0.755734 +0.755817 0.755899 0.755982 0.756064 0.756146 0.756229 0.756311; +#A 11000 0.756393 0.756476 0.756558 0.75664 0.756722 0.756805 0.756887 +0.756969 0.757051 0.757134 0.757216 0.757298 0.75738 0.757462 0.757545 +0.757627 0.757709 0.757791 0.757873 0.757955 0.758038 0.75812 0.758202 +0.758284 0.758366 0.758448 0.75853 0.758612 0.758694 0.758776 0.758858 +0.75894 0.759022 0.759104 0.759186 0.759268 0.75935 0.759432 0.759514 +0.759596 0.759678 0.75976 0.759842 0.759924 0.760006 0.760088 0.760169 +0.760251 0.760333 0.760415 0.760497 0.760579 0.76066 0.760742 0.760824 +0.760906 0.760988 0.761069 0.761151 0.761233 0.761315 0.761396 0.761478 +0.76156 0.761642 0.761723 0.761805 0.761887 0.761968 0.76205 0.762132 +0.762213 0.762295 0.762376 0.762458 0.76254 0.762621 0.762703 0.762784 +0.762866 0.762947 0.763029 0.763111 0.763192 0.763274 0.763355 0.763437 +0.763518 0.7636 0.763681 0.763762 0.763844 0.763925 0.764007 0.764088 +0.76417 0.764251 0.764332 0.764414 0.764495 0.764576 0.764658 0.764739 +0.764821 0.764902 0.764983 0.765064 0.765146 0.765227 0.765308 0.76539 +0.765471 0.765552 0.765633 0.765714 0.765796 0.765877 0.765958 0.766039 +0.76612 0.766202 0.766283 0.766364 0.766445 0.766526 0.766607 0.766688 +0.766769 0.76685 0.766932 0.767013 0.767094 0.767175 0.767256 0.767337 +0.767418 0.767499 0.76758 0.767661 0.767742 0.767823 0.767904 0.767985 +0.768066 0.768147 0.768227 0.768308 0.768389 0.76847 0.768551 0.768632 +0.768713 0.768794 0.768874 0.768955 0.769036 0.769117 0.769198 0.769278 +0.769359 0.76944 0.769521 0.769601 0.769682 0.769763 0.769844 0.769924 +0.770005 0.770086 0.770166 0.770247 0.770328 0.770408 0.770489 0.77057 +0.77065 0.770731 0.770811 0.770892 0.770973 0.771053 0.771134 0.771214 +0.771295 0.771375 0.771456 0.771536 0.771617 0.771697 0.771778 0.771858 +0.771939 0.772019 0.7721 0.77218 0.772261 0.772341 0.772421 0.772502 +0.772582 0.772663 0.772743 0.772823 0.772904 0.772984 0.773064 0.773144 +0.773225 0.773305 0.773385 0.773466 0.773546 0.773626 0.773706 0.773787 +0.773867 0.773947 0.774027 0.774107 0.774188 0.774268 0.774348 0.774428 +0.774508 0.774588 0.774668 0.774749 0.774829 0.774909 0.774989 0.775069 +0.775149 0.775229 0.775309 0.775389 0.775469 0.775549 0.775629 0.775709 +0.775789 0.775869 0.775949 0.776029 0.776109 0.776189 0.776269 0.776349 +0.776428 0.776508 0.776588 0.776668 0.776748 0.776828 0.776908 0.776987 +0.777067 0.777147 0.777227 0.777307 0.777386 0.777466 0.777546 0.777626 +0.777705 0.777785 0.777865 0.777945 0.778024 0.778104 0.778184 0.778263 +0.778343 0.778423 0.778502 0.778582 0.778661 0.778741 0.778821 0.7789 +0.77898 0.779059 0.779139 0.779218 0.779298 0.779377 0.779457 0.779536 +0.779616 0.779695 0.779775 0.779854 0.779934 0.780013 0.780093 0.780172 +0.780251 0.780331 0.78041 0.78049 0.780569 0.780648 0.780728 0.780807 +0.780886 0.780966 0.781045 0.781124 0.781203 0.781283 0.781362 0.781441 +0.78152 0.7816 0.781679 0.781758 0.781837 0.781916 0.781996 0.782075 +0.782154 0.782233 0.782312 0.782391 0.78247 0.78255 0.782629 0.782708 +0.782787 0.782866 0.782945 0.783024 0.783103 0.783182 0.783261 0.78334 +0.783419 0.783498 0.783577 0.783656 0.783735 0.783814 0.783893 0.783972 +0.784051 0.78413 0.784208 0.784287 0.784366 0.784445 0.784524 0.784603 +0.784681 0.78476 0.784839 0.784918 0.784997 0.785075 0.785154 0.785233 +0.785312 0.78539 0.785469 0.785548 0.785626 0.785705 0.785784 0.785863 +0.785941 0.78602 0.786098 0.786177 0.786256 0.786334 0.786413 0.786491 +0.78657 0.786649 0.786727 0.786806 0.786884 0.786963 0.787041 0.78712 +0.787198 0.787277 0.787355 0.787434 0.787512 0.78759 0.787669 0.787747 +0.787826 0.787904 0.787982 0.788061 0.788139 0.788218 0.788296 0.788374 +0.788453 0.788531 0.788609 0.788687 0.788766 0.788844 0.788922 0.789 +0.789079 0.789157 0.789235 0.789313 0.789392 0.78947 0.789548 0.789626 +0.789704 0.789782 0.78986 0.789939 0.790017 0.790095 0.790173 0.790251 +0.790329 0.790407 0.790485 0.790563 0.790641 0.790719 0.790797 0.790875 +0.790953 0.791031 0.791109 0.791187 0.791265 0.791343 0.791421 0.791499 +0.791576 0.791654 0.791732 0.79181 0.791888 0.791966 0.792044 0.792121 +0.792199 0.792277 0.792355 0.792433 0.79251 0.792588 0.792666 0.792744 +0.792821 0.792899 0.792977 0.793054 0.793132 0.79321 0.793287 0.793365 +0.793443 0.79352 0.793598 0.793675 0.793753 0.793831 0.793908 0.793986 +0.794063 0.794141 0.794218 0.794296 0.794373 0.794451 0.794528 0.794606 +0.794683 0.794761 0.794838 0.794915 0.794993 0.79507 0.795148 0.795225 +0.795303 0.79538 0.795457 0.795535 0.795612 0.795689 0.795766 0.795844 +0.795921 0.795998 0.796076 0.796153 0.79623 0.796307 0.796385 0.796462 +0.796539 0.796616 0.796693 0.796771 0.796848 0.796925 0.797002 0.797079 +0.797156 0.797233 0.79731 0.797387 0.797464 0.797542 0.797619 0.797696 +0.797773 0.79785 0.797927 0.798004 0.798081 0.798158 0.798235 0.798311 +0.798388 0.798465 0.798542 0.798619 0.798696 0.798773 0.79885 0.798927 +0.799004 0.79908 0.799157 0.799234 0.799311 0.799388 0.799464 0.799541 +0.799618 0.799695 0.799771 0.799848 0.799925 0.800002 0.800078 0.800155 +0.800232 0.800308 0.800385 0.800462 0.800538 0.800615 0.800691 0.800768 +0.800845 0.800921 0.800998 0.801074 0.801151 0.801227 0.801304 0.80138 +0.801457 0.801533 0.80161 0.801686 0.801763 0.801839 0.801916 0.801992 +0.802068 0.802145 0.802221 0.802298 0.802374 0.80245 0.802527 0.802603 +0.802679 0.802756 0.802832 0.802908 0.802984 0.803061 0.803137 0.803213 +0.803289 0.803366 0.803442 0.803518 0.803594 0.80367 0.803746 0.803823 +0.803899 0.803975 0.804051 0.804127 0.804203 0.804279 0.804355 0.804431 +0.804507 0.804583 0.80466 0.804736 0.804812 0.804888 0.804964 0.80504 +0.805115 0.805191 0.805267 0.805343 0.805419 0.805495 0.805571 0.805647 +0.805723 0.805799 0.805874 0.80595 0.806026 0.806102 0.806178 0.806253 +0.806329 0.806405 0.806481 0.806557 0.806632 0.806708 0.806784 0.806859 +0.806935 0.807011 0.807086 0.807162 0.807238 0.807313 0.807389 0.807465 +0.80754 0.807616 0.807691 0.807767 0.807842 0.807918 0.807994 0.808069 +0.808145 0.80822 0.808296 0.808371 0.808447 0.808522 0.808597 0.808673 +0.808748 0.808824 0.808899 0.808974 0.80905 0.809125 0.809201 0.809276 +0.809351 0.809426 0.809502 0.809577 0.809652 0.809728 0.809803 0.809878 +0.809953 0.810029 0.810104 0.810179 0.810254 0.810329 0.810405 0.81048 +0.810555 0.81063 0.810705 0.81078 0.810855 0.81093 0.811005 0.811081 +0.811156 0.811231 0.811306 0.811381 0.811456 0.811531 0.811606 0.811681 +0.811756 0.811831 0.811906 0.81198 0.812055 0.81213 0.812205 0.81228 +0.812355 0.81243 0.812505 0.812579 0.812654 0.812729 0.812804 0.812879 +0.812953 0.813028 0.813103 0.813178 0.813252 0.813327 0.813402 0.813477 +0.813551 0.813626 0.813701 0.813775 0.81385 0.813924 0.813999 0.814074 +0.814148 0.814223 0.814297 0.814372 0.814447 0.814521 0.814596 0.81467 +0.814745 0.814819 0.814894 0.814968 0.815042 0.815117 0.815191 0.815266 +0.81534 0.815415 0.815489 0.815563 0.815638 0.815712 0.815786 0.815861 +0.815935 0.816009 0.816084 0.816158 0.816232 0.816306 0.816381 0.816455 +0.816529 0.816603 0.816678 0.816752 0.816826 0.8169 0.816974 0.817048 +0.817123 0.817197 0.817271 0.817345 0.817419 0.817493 0.817567 0.817641 +0.817715 0.817789 0.817863 0.817937 0.818011 0.818085 0.818159 0.818233 +0.818307 0.818381 0.818455 0.818529 0.818603 0.818677 0.81875 0.818824 +0.818898 0.818972 0.819046 0.81912 0.819193 0.819267 0.819341 0.819415 +0.819488 0.819562 0.819636 0.81971 0.819783 0.819857 0.819931 0.820004 +0.820078 0.820152 0.820225 0.820299 0.820373 0.820446 0.82052 0.820593 +0.820667 0.820741 0.820814 0.820888 0.820961 0.821035 0.821108 0.821182 +0.821255 0.821329 0.821402 0.821475 0.821549 0.821622 0.821696 0.821769 +0.821842 0.821916 0.821989 0.822062 0.822136 0.822209 0.822282 0.822356 +0.822429 0.822502 0.822576 0.822649 0.822722 0.822795 0.822868 0.822942 +0.823015 0.823088 0.823161 0.823234 0.823307 0.823381 0.823454 0.823527 +0.8236 0.823673 0.823746 0.823819 0.823892 0.823965 0.824038 0.824111 +0.824184 0.824257 0.82433 0.824403 0.824476 0.824549 0.824622 0.824695 +0.824768 0.824841 0.824914 0.824986 0.825059 0.825132 0.825205 0.825278 +0.825351 0.825423 0.825496 0.825569 0.825642 0.825714 0.825787 0.82586 +0.825933 0.826005 0.826078 0.826151 0.826223 0.826296 0.826369 0.826441 +0.826514 0.826586 0.826659 0.826732 0.826804 0.826877 0.826949 0.827022 +0.827094 0.827167 0.827239 0.827312 0.827384 0.827457 0.827529 0.827602 +0.827674 0.827746 0.827819 0.827891 0.827964 0.828036 0.828108 0.828181 +0.828253 0.828325 0.828398 0.82847 0.828542 0.828614 0.828687 0.828759 +0.828831 0.828903 0.828976 0.829048 0.82912 0.829192 0.829264 0.829336 +0.829409 0.829481 0.829553 0.829625 0.829697 0.829769 0.829841 0.829913 +0.829985 0.830057 0.830129 0.830201 0.830273 0.830345 0.830417 0.830489 +0.830561 0.830633 0.830705 0.830777 0.830849 0.830921 0.830992 0.831064 +0.831136 0.831208 0.83128 0.831352 0.831423 0.831495 0.831567 0.831639 +0.83171 0.831782 0.831854 0.831926 0.831997 0.832069 0.832141 0.832212 +0.832284 0.832355 0.832427 0.832499 0.83257 0.832642 0.832713 0.832785 +0.832857 0.832928 0.833 0.833071 0.833143 0.833214 0.833286 0.833357 +0.833429; +#A 12000 0.8335 0.833571 0.833643 0.833714 0.833786 0.833857 0.833928 +0.834 0.834071 0.834142 0.834214 0.834285 0.834356 0.834428 0.834499 +0.83457 0.834641 0.834713 0.834784 0.834855 0.834926 0.834997 0.835068 +0.83514 0.835211 0.835282 0.835353 0.835424 0.835495 0.835566 0.835637 +0.835708 0.835779 0.835851 0.835922 0.835993 0.836064 0.836134 0.836205 +0.836276 0.836347 0.836418 0.836489 0.83656 0.836631 0.836702 0.836773 +0.836844 0.836914 0.836985 0.837056 0.837127 0.837198 0.837269 0.837339 +0.83741 0.837481 0.837552 0.837622 0.837693 0.837764 0.837834 0.837905 +0.837976 0.838046 0.838117 0.838188 0.838258 0.838329 0.838399 0.83847 +0.838541 0.838611 0.838682 0.838752 0.838823 0.838893 0.838964 0.839034 +0.839105 0.839175 0.839245 0.839316 0.839386 0.839457 0.839527 0.839597 +0.839668 0.839738 0.839809 0.839879 0.839949 0.840019 0.84009 0.84016 +0.84023 0.840301 0.840371 0.840441 0.840511 0.840581 0.840652 0.840722 +0.840792 0.840862 0.840932 0.841002 0.841072 0.841143 0.841213 0.841283 +0.841353 0.841423 0.841493 0.841563 0.841633 0.841703 0.841773 0.841843 +0.841913 0.841983 0.842053 0.842123 0.842192 0.842262 0.842332 0.842402 +0.842472 0.842542 0.842612 0.842681 0.842751 0.842821 0.842891 0.842961 +0.84303 0.8431 0.84317 0.84324 0.843309 0.843379 0.843449 0.843518 +0.843588 0.843658 0.843727 0.843797 0.843867 0.843936 0.844006 0.844075 +0.844145 0.844214 0.844284 0.844353 0.844423 0.844492 0.844562 0.844631 +0.844701 0.84477 0.84484 0.844909 0.844979 0.845048 0.845117 0.845187 +0.845256 0.845325 0.845395 0.845464 0.845533 0.845603 0.845672 0.845741 +0.84581 0.84588 0.845949 0.846018 0.846087 0.846156 0.846226 0.846295 +0.846364 0.846433 0.846502 0.846571 0.84664 0.846709 0.846779 0.846848 +0.846917 0.846986 0.847055 0.847124 0.847193 0.847262 0.847331 0.8474 +0.847469 0.847538 0.847606 0.847675 0.847744 0.847813 0.847882 0.847951 +0.84802 0.848089 0.848157 0.848226 0.848295 0.848364 0.848433 0.848501 +0.84857 0.848639 0.848707 0.848776 0.848845 0.848914 0.848982 0.849051 +0.849119 0.849188 0.849257 0.849325 0.849394 0.849463 0.849531 0.8496 +0.849668 0.849737 0.849805 0.849874 0.849942 0.850011 0.850079 0.850148 +0.850216 0.850284 0.850353 0.850421 0.85049 0.850558 0.850626 0.850695 +0.850763 0.850831 0.8509 0.850968 0.851036 0.851104 0.851173 0.851241 +0.851309 0.851377 0.851446 0.851514 0.851582 0.85165 0.851718 0.851786 +0.851855 0.851923 0.851991 0.852059 0.852127 0.852195 0.852263 0.852331 +0.852399 0.852467 0.852535 0.852603 0.852671 0.852739 0.852807 0.852875 +0.852943 0.853011 0.853079 0.853146 0.853214 0.853282 0.85335 0.853418 +0.853486 0.853553 0.853621 0.853689 0.853757 0.853824 0.853892 0.85396 +0.854028 0.854095 0.854163 0.854231 0.854298 0.854366 0.854434 0.854501 +0.854569 0.854636 0.854704 0.854772 0.854839 0.854907 0.854974 0.855042 +0.855109 0.855177 0.855244 0.855312 0.855379 0.855447 0.855514 0.855581 +0.855649 0.855716 0.855783 0.855851 0.855918 0.855986 0.856053 0.85612 +0.856187 0.856255 0.856322 0.856389 0.856456 0.856524 0.856591 0.856658 +0.856725 0.856792 0.85686 0.856927 0.856994 0.857061 0.857128 0.857195 +0.857262 0.857329 0.857396 0.857463 0.85753 0.857597 0.857664 0.857731 +0.857798 0.857865 0.857932 0.857999 0.858066 0.858133 0.8582 0.858267 +0.858334 0.858401 0.858467 0.858534 0.858601 0.858668 0.858735 0.858801 +0.858868 0.858935 0.859002 0.859069 0.859135 0.859202 0.859269 0.859335 +0.859402 0.859469 0.859535 0.859602 0.859668 0.859735 0.859802 0.859868 +0.859935 0.860001 0.860068 0.860134 0.860201 0.860267 0.860334 0.8604 +0.860467 0.860533 0.8606 0.860666 0.860732 0.860799 0.860865 0.860931 +0.860998 0.861064 0.86113 0.861197 0.861263 0.861329 0.861396 0.861462 +0.861528 0.861594 0.86166 0.861727 0.861793 0.861859 0.861925 0.861991 +0.862057 0.862124 0.86219 0.862256 0.862322 0.862388 0.862454 0.86252 +0.862586 0.862652 0.862718 0.862784 0.86285 0.862916 0.862982 0.863048 +0.863114 0.86318 0.863245 0.863311 0.863377 0.863443 0.863509 0.863575 +0.863641 0.863706 0.863772 0.863838 0.863904 0.863969 0.864035 0.864101 +0.864166 0.864232 0.864298 0.864364 0.864429 0.864495 0.86456 0.864626 +0.864692 0.864757 0.864823 0.864888 0.864954 0.865019 0.865085 0.86515 +0.865216 0.865281 0.865347 0.865412 0.865478 0.865543 0.865609 0.865674 +0.865739 0.865805 0.86587 0.865935 0.866001 0.866066 0.866131 0.866197 +0.866262 0.866327 0.866392 0.866458 0.866523 0.866588 0.866653 0.866718 +0.866784 0.866849 0.866914 0.866979 0.867044 0.867109 0.867174 0.867239 +0.867304 0.867369 0.867434 0.867499 0.867564 0.867629 0.867694 0.867759 +0.867824 0.867889 0.867954 0.868019 0.868084 0.868149 0.868214 0.868279 +0.868343 0.868408 0.868473 0.868538 0.868603 0.868667 0.868732 0.868797 +0.868862 0.868926 0.868991 0.869056 0.86912 0.869185 0.86925 0.869314 +0.869379 0.869444 0.869508 0.869573 0.869637 0.869702 0.869767 0.869831 +0.869896 0.86996 0.870025 0.870089 0.870153 0.870218 0.870282 0.870347 +0.870411 0.870476 0.87054 0.870604 0.870669 0.870733 0.870797 0.870862 +0.870926 0.87099 0.871054 0.871119 0.871183 0.871247 0.871311 0.871376 +0.87144 0.871504 0.871568 0.871632 0.871696 0.871761 0.871825 0.871889 +0.871953 0.872017 0.872081 0.872145 0.872209 0.872273 0.872337 0.872401 +0.872465 0.872529 0.872593 0.872657 0.872721 0.872785 0.872848 0.872912 +0.872976 0.87304 0.873104 0.873168 0.873231 0.873295 0.873359 0.873423 +0.873487 0.87355 0.873614 0.873678 0.873741 0.873805 0.873869 0.873932 +0.873996 0.87406 0.874123 0.874187 0.87425 0.874314 0.874378 0.874441 +0.874505 0.874568 0.874632 0.874695 0.874759 0.874822 0.874886 0.874949 +0.875012 0.875076 0.875139 0.875203 0.875266 0.875329 0.875393 0.875456 +0.875519 0.875583 0.875646 0.875709 0.875772 0.875836 0.875899 0.875962 +0.876025 0.876088 0.876152 0.876215 0.876278 0.876341 0.876404 0.876467 +0.87653 0.876593 0.876656 0.87672 0.876783 0.876846 0.876909 0.876972 +0.877035 0.877097 0.87716 0.877223 0.877286 0.877349 0.877412 0.877475 +0.877538 0.877601 0.877664 0.877726 0.877789 0.877852 0.877915 0.877977 +0.87804 0.878103 0.878166 0.878228 0.878291 0.878354 0.878416 0.878479 +0.878542 0.878604 0.878667 0.87873 0.878792 0.878855 0.878917 0.87898 +0.879042 0.879105 0.879167 0.87923 0.879292 0.879355 0.879417 0.87948 +0.879542 0.879605 0.879667 0.879729 0.879792 0.879854 0.879916 0.879979 +0.880041 0.880103 0.880166 0.880228 0.88029 0.880352 0.880415 0.880477 +0.880539 0.880601 0.880663 0.880726 0.880788 0.88085 0.880912 0.880974 +0.881036 0.881098 0.88116 0.881222 0.881284 0.881346 0.881408 0.88147 +0.881532 0.881594 0.881656 0.881718 0.88178 0.881842 0.881904 0.881966 +0.882028 0.882089 0.882151 0.882213 0.882275 0.882337 0.882398 0.88246 +0.882522 0.882584 0.882645 0.882707 0.882769 0.88283 0.882892 0.882954 +0.883015 0.883077 0.883139 0.8832 0.883262 0.883323 0.883385 0.883446 +0.883508 0.883569 0.883631 0.883692 0.883754 0.883815 0.883877 0.883938 +0.884 0.884061 0.884122 0.884184 0.884245 0.884306 0.884368 0.884429 +0.88449 0.884552 0.884613 0.884674 0.884735 0.884797 0.884858 0.884919 +0.88498 0.885041 0.885103 0.885164 0.885225 0.885286 0.885347 0.885408 +0.885469 0.88553 0.885591 0.885652 0.885713 0.885774 0.885835 0.885896 +0.885957 0.886018 0.886079 0.88614 0.886201 0.886262 0.886323 0.886384 +0.886444 0.886505 0.886566 0.886627 0.886688 0.886748 0.886809 0.88687 +0.886931 0.886991 0.887052 0.887113 0.887173 0.887234 0.887295 0.887355 +0.887416 0.887477 0.887537 0.887598 0.887658 0.887719 0.887779 0.88784 +0.8879 0.887961 0.888021 0.888082 0.888142 0.888203 0.888263 0.888323 +0.888384 0.888444 0.888505 0.888565 0.888625 0.888686 0.888746 0.888806 +0.888866 0.888927 0.888987 0.889047 0.889107 0.889168 0.889228 0.889288 +0.889348 0.889408 0.889468 0.889529 0.889589 0.889649 0.889709 0.889769 +0.889829 0.889889 0.889949 0.890009 0.890069 0.890129 0.890189 0.890249 +0.890309 0.890369 0.890429 0.890488 0.890548 0.890608 0.890668 0.890728 +0.890788 0.890847 0.890907 0.890967 0.891027 0.891086 0.891146 0.891206 +0.891266 0.891325 0.891385 0.891445 0.891504 0.891564 0.891623 0.891683 +0.891743 0.891802 0.891862 0.891921 0.891981 0.89204 0.8921 0.892159 +0.892219 0.892278 0.892338 0.892397 0.892457 0.892516 0.892575 0.892635 +0.892694 0.892753 0.892813 0.892872 0.892931 0.892991 0.89305 0.893109 +0.893168 0.893228 0.893287 0.893346 0.893405 0.893464 0.893524 0.893583 +0.893642 0.893701 0.89376 0.893819 0.893878 0.893937 0.893996 0.894055 +0.894114 0.894173 0.894232 0.894291 0.89435 0.894409 0.894468 0.894527 +0.894586 0.894645 0.894704 0.894762 0.894821 0.89488 0.894939 0.894998 +0.895056 0.895115 0.895174 0.895233 0.895291 0.89535 0.895409 0.895467 +0.895526 0.895585 0.895643 0.895702 0.895761 0.895819 0.895878 0.895936 +0.895995 0.896053 0.896112 0.89617 0.896229 0.896287 0.896346 0.896404 +0.896463 0.896521 0.896579 0.896638 0.896696 0.896755 0.896813 0.896871 +0.896929 0.896988 0.897046 0.897104 0.897163 0.897221 0.897279 0.897337 +0.897395 0.897454 0.897512 0.89757 0.897628 0.897686 0.897744 0.897802 +0.89786 0.897918 0.897977 0.898035 0.898093 0.898151 0.898209 0.898266 +0.898324; +#A 13000 0.898382 0.89844 0.898498 0.898556 0.898614 0.898672 0.89873 +0.898788 0.898845 0.898903 0.898961 0.899019 0.899077 0.899134 0.899192 +0.89925 0.899307 0.899365 0.899423 0.899481 0.899538 0.899596 0.899653 +0.899711 0.899769 0.899826 0.899884 0.899941 0.899999 0.900056 0.900114 +0.900171 0.900229 0.900286 0.900344 0.900401 0.900459 0.900516 0.900573 +0.900631 0.900688 0.900745 0.900803 0.90086 0.900917 0.900975 0.901032 +0.901089 0.901146 0.901204 0.901261 0.901318 0.901375 0.901432 0.901489 +0.901547 0.901604 0.901661 0.901718 0.901775 0.901832 0.901889 0.901946 +0.902003 0.90206 0.902117 0.902174 0.902231 0.902288 0.902345 0.902402 +0.902459 0.902516 0.902573 0.902629 0.902686 0.902743 0.9028 0.902857 +0.902913 0.90297 0.903027 0.903084 0.90314 0.903197 0.903254 0.90331 +0.903367 0.903424 0.90348 0.903537 0.903594 0.90365 0.903707 0.903763 +0.90382 0.903876 0.903933 0.903989 0.904046 0.904102 0.904159 0.904215 +0.904272 0.904328 0.904384 0.904441 0.904497 0.904554 0.90461 0.904666 +0.904723 0.904779 0.904835 0.904891 0.904948 0.905004 0.90506 0.905116 +0.905172 0.905229 0.905285 0.905341 0.905397 0.905453 0.905509 0.905565 +0.905621 0.905677 0.905733 0.905789 0.905845 0.905901 0.905957 0.906013 +0.906069 0.906125 0.906181 0.906237 0.906293 0.906349 0.906405 0.906461 +0.906516 0.906572 0.906628 0.906684 0.90674 0.906795 0.906851 0.906907 +0.906962 0.907018 0.907074 0.90713 0.907185 0.907241 0.907296 0.907352 +0.907408 0.907463 0.907519 0.907574 0.90763 0.907685 0.907741 0.907796 +0.907852 0.907907 0.907963 0.908018 0.908073 0.908129 0.908184 0.90824 +0.908295 0.90835 0.908406 0.908461 0.908516 0.908571 0.908627 0.908682 +0.908737 0.908792 0.908848 0.908903 0.908958 0.909013 0.909068 0.909123 +0.909178 0.909234 0.909289 0.909344 0.909399 0.909454 0.909509 0.909564 +0.909619 0.909674 0.909729 0.909784 0.909839 0.909894 0.909948 0.910003 +0.910058 0.910113 0.910168 0.910223 0.910277 0.910332 0.910387 0.910442 +0.910497 0.910551 0.910606 0.910661 0.910715 0.91077 0.910825 0.910879 +0.910934 0.910989 0.911043 0.911098 0.911152 0.911207 0.911261 0.911316 +0.91137 0.911425 0.911479 0.911534 0.911588 0.911643 0.911697 0.911752 +0.911806 0.91186 0.911915 0.911969 0.912023 0.912078 0.912132 0.912186 +0.91224 0.912295 0.912349 0.912403 0.912457 0.912511 0.912566 0.91262 +0.912674 0.912728 0.912782 0.912836 0.91289 0.912944 0.912998 0.913052 +0.913107 0.913161 0.913215 0.913269 0.913322 0.913376 0.91343 0.913484 +0.913538 0.913592 0.913646 0.9137 0.913754 0.913807 0.913861 0.913915 +0.913969 0.914023 0.914076 0.91413 0.914184 0.914237 0.914291 0.914345 +0.914398 0.914452 0.914506 0.914559 0.914613 0.914666 0.91472 0.914774 +0.914827 0.914881 0.914934 0.914988 0.915041 0.915095 0.915148 0.915201 +0.915255 0.915308 0.915362 0.915415 0.915468 0.915522 0.915575 0.915628 +0.915682 0.915735 0.915788 0.915841 0.915895 0.915948 0.916001 0.916054 +0.916107 0.91616 0.916214 0.916267 0.91632 0.916373 0.916426 0.916479 +0.916532 0.916585 0.916638 0.916691 0.916744 0.916797 0.91685 0.916903 +0.916956 0.917009 0.917062 0.917114 0.917167 0.91722 0.917273 0.917326 +0.917379 0.917431 0.917484 0.917537 0.91759 0.917642 0.917695 0.917748 +0.9178 0.917853 0.917906 0.917958 0.918011 0.918064 0.918116 0.918169 +0.918221 0.918274 0.918326 0.918379 0.918431 0.918484 0.918536 0.918589 +0.918641 0.918694 0.918746 0.918798 0.918851 0.918903 0.918955 0.919008 +0.91906 0.919112 0.919165 0.919217 0.919269 0.919321 0.919374 0.919426 +0.919478 0.91953 0.919582 0.919634 0.919687 0.919739 0.919791 0.919843 +0.919895 0.919947 0.919999 0.920051 0.920103 0.920155 0.920207 0.920259 +0.920311 0.920363 0.920415 0.920466 0.920518 0.92057 0.920622 0.920674 +0.920726 0.920777 0.920829 0.920881 0.920933 0.920985 0.921036 0.921088 +0.92114 0.921191 0.921243 0.921295 0.921346 0.921398 0.921449 0.921501 +0.921553 0.921604 0.921656 0.921707 0.921759 0.92181 0.921862 0.921913 +0.921965 0.922016 0.922067 0.922119 0.92217 0.922221 0.922273 0.922324 +0.922376 0.922427 0.922478 0.922529 0.922581 0.922632 0.922683 0.922734 +0.922785 0.922837 0.922888 0.922939 0.92299 0.923041 0.923092 0.923143 +0.923194 0.923245 0.923297 0.923348 0.923399 0.92345 0.9235 0.923551 +0.923602 0.923653 0.923704 0.923755 0.923806 0.923857 0.923908 0.923959 +0.924009 0.92406 0.924111 0.924162 0.924212 0.924263 0.924314 0.924365 +0.924415 0.924466 0.924517 0.924567 0.924618 0.924669 0.924719 0.92477 +0.92482 0.924871 0.924921 0.924972 0.925022 0.925073 0.925123 0.925174 +0.925224 0.925275 0.925325 0.925376 0.925426 0.925476 0.925527 0.925577 +0.925627 0.925678 0.925728 0.925778 0.925828 0.925879 0.925929 0.925979 +0.926029 0.926079 0.92613 0.92618 0.92623 0.92628 0.92633 0.92638 0.92643 +0.92648 0.92653 0.92658 0.92663 0.92668 0.92673 0.92678 0.92683 0.92688 +0.92693 0.92698 0.92703 0.92708 0.92713 0.927179 0.927229 0.927279 +0.927329 0.927379 0.927428 0.927478 0.927528 0.927577 0.927627 0.927677 +0.927727 0.927776 0.927826 0.927875 0.927925 0.927975 0.928024 0.928074 +0.928123 0.928173 0.928222 0.928272 0.928321 0.928371 0.92842 0.928469 +0.928519 0.928568 0.928618 0.928667 0.928716 0.928766 0.928815 0.928864 +0.928914 0.928963 0.929012 0.929061 0.929111 0.92916 0.929209 0.929258 +0.929307 0.929356 0.929406 0.929455 0.929504 0.929553 0.929602 0.929651 +0.9297 0.929749 0.929798 0.929847 0.929896 0.929945 0.929994 0.930043 +0.930092 0.93014 0.930189 0.930238 0.930287 0.930336 0.930385 0.930433 +0.930482 0.930531 0.93058 0.930628 0.930677 0.930726 0.930775 0.930823 +0.930872 0.930921 0.930969 0.931018 0.931066 0.931115 0.931163 0.931212 +0.931261 0.931309 0.931358 0.931406 0.931454 0.931503 0.931551 0.9316 +0.931648 0.931696 0.931745 0.931793 0.931842 0.93189 0.931938 0.931986 +0.932035 0.932083 0.932131 0.932179 0.932228 0.932276 0.932324 0.932372 +0.93242 0.932468 0.932517 0.932565 0.932613 0.932661 0.932709 0.932757 +0.932805 0.932853 0.932901 0.932949 0.932997 0.933045 0.933093 0.93314 +0.933188 0.933236 0.933284 0.933332 0.93338 0.933428 0.933475 0.933523 +0.933571 0.933619 0.933666 0.933714 0.933762 0.933809 0.933857 0.933905 +0.933952 0.934 0.934048 0.934095 0.934143 0.93419 0.934238 0.934285 +0.934333 0.93438 0.934428 0.934475 0.934523 0.93457 0.934618 0.934665 +0.934712 0.93476 0.934807 0.934854 0.934902 0.934949 0.934996 0.935044 +0.935091 0.935138 0.935185 0.935232 0.93528 0.935327 0.935374 0.935421 +0.935468 0.935515 0.935562 0.935609 0.935656 0.935704 0.935751 0.935798 +0.935845 0.935892 0.935938 0.935985 0.936032 0.936079 0.936126 0.936173 +0.93622 0.936267 0.936314 0.93636 0.936407 0.936454 0.936501 0.936548 +0.936594 0.936641 0.936688 0.936734 0.936781 0.936828 0.936874 0.936921 +0.936968 0.937014 0.937061 0.937107 0.937154 0.9372 0.937247 0.937293 +0.93734 0.937386 0.937433 0.937479 0.937526 0.937572 0.937618 0.937665 +0.937711 0.937757 0.937804 0.93785 0.937896 0.937943 0.937989 0.938035 +0.938081 0.938127 0.938174 0.93822 0.938266 0.938312 0.938358 0.938404 +0.93845 0.938497 0.938543 0.938589 0.938635 0.938681 0.938727 0.938773 +0.938819 0.938865 0.93891 0.938956 0.939002 0.939048 0.939094 0.93914 +0.939186 0.939232 0.939277 0.939323 0.939369 0.939415 0.93946 0.939506 +0.939552 0.939597 0.939643 0.939689 0.939734 0.93978 0.939826 0.939871 +0.939917 0.939962 0.940008 0.940054 0.940099 0.940144 0.94019 0.940235 +0.940281 0.940326 0.940372 0.940417 0.940463 0.940508 0.940553 0.940599 +0.940644 0.940689 0.940734 0.94078 0.940825 0.94087 0.940915 0.940961 +0.941006 0.941051 0.941096 0.941141 0.941186 0.941231 0.941277 0.941322 +0.941367 0.941412 0.941457 0.941502 0.941547 0.941592 0.941637 0.941682 +0.941727 0.941772 0.941816 0.941861 0.941906 0.941951 0.941996 0.942041 +0.942085 0.94213 0.942175 0.94222 0.942264 0.942309 0.942354 0.942399 +0.942443 0.942488 0.942532 0.942577 0.942622 0.942666 0.942711 0.942755 +0.9428 0.942845 0.942889 0.942933 0.942978 0.943022 0.943067 0.943111 +0.943156 0.9432 0.943244 0.943289 0.943333 0.943377 0.943422 0.943466 +0.94351 0.943555 0.943599 0.943643 0.943687 0.943731 0.943776 0.94382 +0.943864 0.943908 0.943952 0.943996 0.94404 0.944084 0.944129 0.944173 +0.944217 0.944261 0.944305 0.944348 0.944392 0.944436 0.94448 0.944524 +0.944568 0.944612 0.944656 0.9447 0.944743 0.944787 0.944831 0.944875 +0.944919 0.944962 0.945006 0.94505 0.945093 0.945137 0.945181 0.945224 +0.945268 0.945312 0.945355 0.945399 0.945442 0.945486 0.945529 0.945573 +0.945616 0.94566 0.945703 0.945747 0.94579 0.945834 0.945877 0.94592 +0.945964 0.946007 0.94605 0.946094 0.946137 0.94618 0.946224 0.946267 +0.94631 0.946353 0.946396 0.94644 0.946483 0.946526 0.946569 0.946612 +0.946655 0.946698 0.946741 0.946784 0.946827 0.946871 0.946913 0.946956 +0.946999 0.947042 0.947085 0.947128 0.947171 0.947214 0.947257 0.9473 +0.947343 0.947385 0.947428 0.947471 0.947514 0.947556 0.947599 0.947642 +0.947685 0.947727 0.94777 0.947813 0.947855 0.947898 0.947941 0.947983 +0.948026 0.948068 0.948111 0.948153 0.948196 0.948238 0.948281 0.948323 +0.948366 0.948408 0.948451 0.948493 0.948535 0.948578 0.94862; +#A 14000 0.948662 0.948705 0.948747 0.948789 0.948831 0.948874 0.948916 +0.948958 0.949 0.949042 0.949085 0.949127 0.949169 0.949211 0.949253 +0.949295 0.949337 0.949379 0.949421 0.949463 0.949505 0.949547 0.949589 +0.949631 0.949673 0.949715 0.949757 0.949799 0.949841 0.949883 0.949924 +0.949966 0.950008 0.95005 0.950091 0.950133 0.950175 0.950217 0.950258 +0.9503 0.950342 0.950383 0.950425 0.950467 0.950508 0.95055 0.950591 +0.950633 0.950674 0.950716 0.950757 0.950799 0.95084 0.950882 0.950923 +0.950965 0.951006 0.951047 0.951089 0.95113 0.951172 0.951213 0.951254 +0.951295 0.951337 0.951378 0.951419 0.95146 0.951502 0.951543 0.951584 +0.951625 0.951666 0.951707 0.951748 0.951789 0.951831 0.951872 0.951913 +0.951954 0.951995 0.952036 0.952077 0.952118 0.952158 0.952199 0.95224 +0.952281 0.952322 0.952363 0.952404 0.952445 0.952485 0.952526 0.952567 +0.952608 0.952648 0.952689 0.95273 0.95277 0.952811 0.952852 0.952892 +0.952933 0.952974 0.953014 0.953055 0.953095 0.953136 0.953176 0.953217 +0.953257 0.953298 0.953338 0.953379 0.953419 0.95346 0.9535 0.95354 +0.953581 0.953621 0.953661 0.953702 0.953742 0.953782 0.953822 0.953863 +0.953903 0.953943 0.953983 0.954023 0.954064 0.954104 0.954144 0.954184 +0.954224 0.954264 0.954304 0.954344 0.954384 0.954424 0.954464 0.954504 +0.954544 0.954584 0.954624 0.954664 0.954704 0.954744 0.954783 0.954823 +0.954863 0.954903 0.954943 0.954982 0.955022 0.955062 0.955102 0.955141 +0.955181 0.955221 0.95526 0.9553 0.95534 0.955379 0.955419 0.955458 +0.955498 0.955537 0.955577 0.955616 0.955656 0.955695 0.955735 0.955774 +0.955814 0.955853 0.955892 0.955932 0.955971 0.95601 0.95605 0.956089 +0.956128 0.956168 0.956207 0.956246 0.956285 0.956324 0.956364 0.956403 +0.956442 0.956481 0.95652 0.956559 0.956598 0.956637 0.956676 0.956716 +0.956755 0.956794 0.956833 0.956871 0.95691 0.956949 0.956988 0.957027 +0.957066 0.957105 0.957144 0.957183 0.957221 0.95726 0.957299 0.957338 +0.957376 0.957415 0.957454 0.957493 0.957531 0.95757 0.957609 0.957647 +0.957686 0.957724 0.957763 0.957801 0.95784 0.957879 0.957917 0.957956 +0.957994 0.958032 0.958071 0.958109 0.958148 0.958186 0.958225 0.958263 +0.958301 0.95834 0.958378 0.958416 0.958454 0.958493 0.958531 0.958569 +0.958607 0.958646 0.958684 0.958722 0.95876 0.958798 0.958836 0.958874 +0.958912 0.95895 0.958988 0.959026 0.959064 0.959102 0.95914 0.959178 +0.959216 0.959254 0.959292 0.95933 0.959368 0.959406 0.959444 0.959481 +0.959519 0.959557 0.959595 0.959632 0.95967 0.959708 0.959746 0.959783 +0.959821 0.959859 0.959896 0.959934 0.959971 0.960009 0.960047 0.960084 +0.960122 0.960159 0.960197 0.960234 0.960272 0.960309 0.960346 0.960384 +0.960421 0.960459 0.960496 0.960533 0.960571 0.960608 0.960645 0.960683 +0.96072 0.960757 0.960794 0.960831 0.960869 0.960906 0.960943 0.96098 +0.961017 0.961054 0.961091 0.961128 0.961166 0.961203 0.96124 0.961277 +0.961314 0.961351 0.961388 0.961424 0.961461 0.961498 0.961535 0.961572 +0.961609 0.961646 0.961682 0.961719 0.961756 0.961793 0.96183 0.961866 +0.961903 0.96194 0.961976 0.962013 0.96205 0.962086 0.962123 0.96216 +0.962196 0.962233 0.962269 0.962306 0.962342 0.962379 0.962415 0.962452 +0.962488 0.962525 0.962561 0.962597 0.962634 0.96267 0.962707 0.962743 +0.962779 0.962815 0.962852 0.962888 0.962924 0.96296 0.962997 0.963033 +0.963069 0.963105 0.963141 0.963177 0.963214 0.96325 0.963286 0.963322 +0.963358 0.963394 0.96343 0.963466 0.963502 0.963538 0.963574 0.963609 +0.963645 0.963681 0.963717 0.963753 0.963789 0.963825 0.96386 0.963896 +0.963932 0.963968 0.964003 0.964039 0.964075 0.96411 0.964146 0.964182 +0.964217 0.964253 0.964289 0.964324 0.96436 0.964395 0.964431 0.964466 +0.964502 0.964537 0.964573 0.964608 0.964644 0.964679 0.964714 0.96475 +0.964785 0.96482 0.964856 0.964891 0.964926 0.964962 0.964997 0.965032 +0.965067 0.965102 0.965138 0.965173 0.965208 0.965243 0.965278 0.965313 +0.965348 0.965383 0.965419 0.965454 0.965489 0.965524 0.965559 0.965594 +0.965628 0.965663 0.965698 0.965733 0.965768 0.965803 0.965838 0.965873 +0.965907 0.965942 0.965977 0.966012 0.966046 0.966081 0.966116 0.966151 +0.966185 0.96622 0.966254 0.966289 0.966324 0.966358 0.966393 0.966427 +0.966462 0.966496 0.966531 0.966565 0.9666 0.966634 0.966669 0.966703 +0.966738 0.966772 0.966806 0.966841 0.966875 0.966909 0.966944 0.966978 +0.967012 0.967046 0.96708 0.967115 0.967149 0.967183 0.967217 0.967251 +0.967285 0.96732 0.967354 0.967388 0.967422 0.967456 0.96749 0.967524 +0.967558 0.967592 0.967626 0.96766 0.967694 0.967727 0.967761 0.967795 +0.967829 0.967863 0.967897 0.96793 0.967964 0.967998 0.968032 0.968065 +0.968099 0.968133 0.968167 0.9682 0.968234 0.968267 0.968301 0.968335 +0.968368 0.968402 0.968435 0.968469 0.968502 0.968536 0.968569 0.968603 +0.968636 0.96867 0.968703 0.968736 0.96877 0.968803 0.968836 0.96887 +0.968903 0.968936 0.968969 0.969003 0.969036 0.969069 0.969102 0.969135 +0.969169 0.969202 0.969235 0.969268 0.969301 0.969334 0.969367 0.9694 +0.969433 0.969466 0.969499 0.969532 0.969565 0.969598 0.969631 0.969664 +0.969697 0.96973 0.969762 0.969795 0.969828 0.969861 0.969894 0.969926 +0.969959 0.969992 0.970025 0.970057 0.97009 0.970123 0.970155 0.970188 +0.97022 0.970253 0.970286 0.970318 0.970351 0.970383 0.970416 0.970448 +0.970481 0.970513 0.970546 0.970578 0.97061 0.970643 0.970675 0.970707 +0.97074 0.970772 0.970804 0.970837 0.970869 0.970901 0.970933 0.970966 +0.970998 0.97103 0.971062 0.971094 0.971126 0.971158 0.97119 0.971223 +0.971255 0.971287 0.971319 0.971351 0.971383 0.971415 0.971447 0.971478 +0.97151 0.971542 0.971574 0.971606 0.971638 0.97167 0.971701 0.971733 +0.971765 0.971797 0.971828 0.97186 0.971892 0.971924 0.971955 0.971987 +0.972019 0.97205 0.972082 0.972113 0.972145 0.972176 0.972208 0.972239 +0.972271 0.972302 0.972334 0.972365 0.972397 0.972428 0.97246 0.972491 +0.972522 0.972554 0.972585 0.972616 0.972647 0.972679 0.97271 0.972741 +0.972772 0.972804 0.972835 0.972866 0.972897 0.972928 0.972959 0.97299 +0.973022 0.973053 0.973084 0.973115 0.973146 0.973177 0.973208 0.973239 +0.97327 0.9733 0.973331 0.973362 0.973393 0.973424 0.973455 0.973486 +0.973516 0.973547 0.973578 0.973609 0.973639 0.97367 0.973701 0.973732 +0.973762 0.973793 0.973823 0.973854 0.973885 0.973915 0.973946 0.973976 +0.974007 0.974037 0.974068 0.974098 0.974129 0.974159 0.97419 0.97422 +0.97425 0.974281 0.974311 0.974341 0.974372 0.974402 0.974432 0.974462 +0.974493 0.974523 0.974553 0.974583 0.974613 0.974644 0.974674 0.974704 +0.974734 0.974764 0.974794 0.974824 0.974854 0.974884 0.974914 0.974944 +0.974974 0.975004 0.975034 0.975064 0.975094 0.975124 0.975154 0.975183 +0.975213 0.975243 0.975273 0.975303 0.975332 0.975362 0.975392 0.975421 +0.975451 0.975481 0.97551 0.97554 0.97557 0.975599 0.975629 0.975658 +0.975688 0.975717 0.975747 0.975776 0.975806 0.975835 0.975865 0.975894 +0.975924 0.975953 0.975982 0.976012 0.976041 0.97607 0.9761 0.976129 +0.976158 0.976188 0.976217 0.976246 0.976275 0.976304 0.976333 0.976363 +0.976392 0.976421 0.97645 0.976479 0.976508 0.976537 0.976566 0.976595 +0.976624 0.976653 0.976682 0.976711 0.97674 0.976769 0.976798 0.976826 +0.976855 0.976884 0.976913 0.976942 0.97697 0.976999 0.977028 0.977057 +0.977085 0.977114 0.977143 0.977171 0.9772 0.977229 0.977257 0.977286 +0.977314 0.977343 0.977371 0.9774 0.977428 0.977457 0.977485 0.977514 +0.977542 0.977571 0.977599 0.977627 0.977656 0.977684 0.977712 0.977741 +0.977769 0.977797 0.977825 0.977854 0.977882 0.97791 0.977938 0.977966 +0.977995 0.978023 0.978051 0.978079 0.978107 0.978135 0.978163 0.978191 +0.978219 0.978247 0.978275 0.978303 0.978331 0.978359 0.978387 0.978414 +0.978442 0.97847 0.978498 0.978526 0.978554 0.978581 0.978609 0.978637 +0.978665 0.978692 0.97872 0.978748 0.978775 0.978803 0.97883 0.978858 +0.978886 0.978913 0.978941 0.978968 0.978996 0.979023 0.979051 0.979078 +0.979106 0.979133 0.97916 0.979188 0.979215 0.979243 0.97927 0.979297 +0.979324 0.979352 0.979379 0.979406 0.979433 0.979461 0.979488 0.979515 +0.979542 0.979569 0.979596 0.979624 0.979651 0.979678 0.979705 0.979732 +0.979759 0.979786 0.979813 0.97984 0.979867 0.979894 0.97992 0.979947 +0.979974 0.980001 0.980028 0.980055 0.980081 0.980108 0.980135 0.980162 +0.980189 0.980215 0.980242 0.980269 0.980295 0.980322 0.980349 0.980375 +0.980402 0.980428 0.980455 0.980481 0.980508 0.980534 0.980561 0.980587 +0.980614 0.98064 0.980667 0.980693 0.980719 0.980746 0.980772 0.980798 +0.980825 0.980851 0.980877 0.980904 0.98093 0.980956 0.980982 0.981008 +0.981035 0.981061 0.981087 0.981113 0.981139 0.981165 0.981191 0.981217 +0.981243 0.981269 0.981295 0.981321 0.981347 0.981373 0.981399 0.981425 +0.981451 0.981477 0.981502 0.981528 0.981554 0.98158 0.981606 0.981631 +0.981657 0.981683 0.981709 0.981734 0.98176 0.981786 0.981811 0.981837 +0.981862 0.981888 0.981914 0.981939 0.981965 0.98199 0.982016 0.982041 +0.982067 0.982092 0.982117 0.982143 0.982168 0.982194 0.982219 0.982244 +0.98227 0.982295 0.98232 0.982345 0.982371 0.982396 0.982421 0.982446 +0.982471; +#A 15000 0.982497 0.982522 0.982547 0.982572 0.982597 0.982622 0.982647 +0.982672 0.982697 0.982722 0.982747 0.982772 0.982797 0.982822 0.982847 +0.982872 0.982897 0.982922 0.982946 0.982971 0.982996 0.983021 0.983046 +0.98307 0.983095 0.98312 0.983144 0.983169 0.983194 0.983218 0.983243 +0.983268 0.983292 0.983317 0.983341 0.983366 0.98339 0.983415 0.983439 +0.983464 0.983488 0.983513 0.983537 0.983561 0.983586 0.98361 0.983635 +0.983659 0.983683 0.983707 0.983732 0.983756 0.98378 0.983804 0.983829 +0.983853 0.983877 0.983901 0.983925 0.983949 0.983973 0.983997 0.984021 +0.984046 0.98407 0.984094 0.984118 0.984141 0.984165 0.984189 0.984213 +0.984237 0.984261 0.984285 0.984309 0.984333 0.984356 0.98438 0.984404 +0.984428 0.984451 0.984475 0.984499 0.984523 0.984546 0.98457 0.984593 +0.984617 0.984641 0.984664 0.984688 0.984711 0.984735 0.984758 0.984782 +0.984805 0.984829 0.984852 0.984876 0.984899 0.984922 0.984946 0.984969 +0.984992 0.985016 0.985039 0.985062 0.985085 0.985109 0.985132 0.985155 +0.985178 0.985201 0.985225 0.985248 0.985271 0.985294 0.985317 0.98534 +0.985363 0.985386 0.985409 0.985432 0.985455 0.985478 0.985501 0.985524 +0.985547 0.98557 0.985592 0.985615 0.985638 0.985661 0.985684 0.985706 +0.985729 0.985752 0.985775 0.985797 0.98582 0.985843 0.985865 0.985888 +0.985911 0.985933 0.985956 0.985978 0.986001 0.986023 0.986046 0.986068 +0.986091 0.986113 0.986136 0.986158 0.98618 0.986203 0.986225 0.986248 +0.98627 0.986292 0.986314 0.986337 0.986359 0.986381 0.986403 0.986426 +0.986448 0.98647 0.986492 0.986514 0.986536 0.986558 0.98658 0.986603 +0.986625 0.986647 0.986669 0.986691 0.986713 0.986735 0.986756 0.986778 +0.9868 0.986822 0.986844 0.986866 0.986888 0.986909 0.986931 0.986953 +0.986975 0.986996 0.987018 0.98704 0.987062 0.987083 0.987105 0.987126 +0.987148 0.98717 0.987191 0.987213 0.987234 0.987256 0.987277 0.987299 +0.98732 0.987342 0.987363 0.987385 0.987406 0.987427 0.987449 0.98747 +0.987491 0.987513 0.987534 0.987555 0.987576 0.987598 0.987619 0.98764 +0.987661 0.987682 0.987704 0.987725 0.987746 0.987767 0.987788 0.987809 +0.98783 0.987851 0.987872 0.987893 0.987914 0.987935 0.987956 0.987977 +0.987998 0.988019 0.988039 0.98806 0.988081 0.988102 0.988123 0.988143 +0.988164 0.988185 0.988206 0.988226 0.988247 0.988268 0.988288 0.988309 +0.988329 0.98835 0.988371 0.988391 0.988412 0.988432 0.988453 0.988473 +0.988494 0.988514 0.988535 0.988555 0.988575 0.988596 0.988616 0.988636 +0.988657 0.988677 0.988697 0.988717 0.988738 0.988758 0.988778 0.988798 +0.988819 0.988839 0.988859 0.988879 0.988899 0.988919 0.988939 0.988959 +0.988979 0.988999 0.989019 0.989039 0.989059 0.989079 0.989099 0.989119 +0.989139 0.989159 0.989179 0.989198 0.989218 0.989238 0.989258 0.989277 +0.989297 0.989317 0.989337 0.989356 0.989376 0.989396 0.989415 0.989435 +0.989455 0.989474 0.989494 0.989513 0.989533 0.989552 0.989572 0.989591 +0.989611 0.98963 0.989649 0.989669 0.989688 0.989708 0.989727 0.989746 +0.989766 0.989785 0.989804 0.989823 0.989843 0.989862 0.989881 0.9899 +0.989919 0.989939 0.989958 0.989977 0.989996 0.990015 0.990034 0.990053 +0.990072 0.990091 0.99011 0.990129 0.990148 0.990167 0.990186 0.990205 +0.990224 0.990242 0.990261 0.99028 0.990299 0.990318 0.990336 0.990355 +0.990374 0.990393 0.990411 0.99043 0.990449 0.990467 0.990486 0.990505 +0.990523 0.990542 0.99056 0.990579 0.990597 0.990616 0.990634 0.990653 +0.990671 0.99069 0.990708 0.990726 0.990745 0.990763 0.990781 0.9908 +0.990818 0.990836 0.990855 0.990873 0.990891 0.990909 0.990927 0.990946 +0.990964 0.990982 0.991 0.991018 0.991036 0.991054 0.991072 0.99109 +0.991108 0.991126 0.991144 0.991162 0.99118 0.991198 0.991216 0.991234 +0.991252 0.99127 0.991287 0.991305 0.991323 0.991341 0.991359 0.991376 +0.991394 0.991412 0.991429 0.991447 0.991465 0.991482 0.9915 0.991518 +0.991535 0.991553 0.99157 0.991588 0.991605 0.991623 0.99164 0.991658 +0.991675 0.991693 0.99171 0.991727 0.991745 0.991762 0.991779 0.991797 +0.991814 0.991831 0.991848 0.991866 0.991883 0.9919 0.991917 0.991934 +0.991952 0.991969 0.991986 0.992003 0.99202 0.992037 0.992054 0.992071 +0.992088 0.992105 0.992122 0.992139 0.992156 0.992173 0.99219 0.992207 +0.992223 0.99224 0.992257 0.992274 0.992291 0.992307 0.992324 0.992341 +0.992358 0.992374 0.992391 0.992408 0.992424 0.992441 0.992457 0.992474 +0.992491 0.992507 0.992524 0.99254 0.992557 0.992573 0.99259 0.992606 +0.992622 0.992639 0.992655 0.992672 0.992688 0.992704 0.992721 0.992737 +0.992753 0.992769 0.992786 0.992802 0.992818 0.992834 0.99285 0.992867 +0.992883 0.992899 0.992915 0.992931 0.992947 0.992963 0.992979 0.992995 +0.993011 0.993027 0.993043 0.993059 0.993075 0.993091 0.993107 0.993122 +0.993138 0.993154 0.99317 0.993186 0.993201 0.993217 0.993233 0.993249 +0.993264 0.99328 0.993296 0.993311 0.993327 0.993342 0.993358 0.993374 +0.993389 0.993405 0.99342 0.993436 0.993451 0.993467 0.993482 0.993497 +0.993513 0.993528 0.993544 0.993559 0.993574 0.99359 0.993605 0.99362 +0.993635 0.993651 0.993666 0.993681 0.993696 0.993711 0.993727 0.993742 +0.993757 0.993772 0.993787 0.993802 0.993817 0.993832 0.993847 0.993862 +0.993877 0.993892 0.993907 0.993922 0.993937 0.993952 0.993967 0.993981 +0.993996 0.994011 0.994026 0.994041 0.994055 0.99407 0.994085 0.994099 +0.994114 0.994129 0.994143 0.994158 0.994173 0.994187 0.994202 0.994216 +0.994231 0.994245 0.99426 0.994274 0.994289 0.994303 0.994318 0.994332 +0.994346 0.994361 0.994375 0.99439 0.994404 0.994418 0.994432 0.994447 +0.994461 0.994475 0.994489 0.994503 0.994518 0.994532 0.994546 0.99456 +0.994574 0.994588 0.994602 0.994616 0.99463 0.994644 0.994658 0.994672 +0.994686 0.9947 0.994714 0.994728 0.994742 0.994756 0.99477 0.994783 +0.994797 0.994811 0.994825 0.994839 0.994852 0.994866 0.99488 0.994893 +0.994907 0.994921 0.994934 0.994948 0.994961 0.994975 0.994989 0.995002 +0.995016 0.995029 0.995043 0.995056 0.99507 0.995083 0.995096 0.99511 +0.995123 0.995136 0.99515 0.995163 0.995176 0.99519 0.995203 0.995216 +0.995229 0.995243 0.995256 0.995269 0.995282 0.995295 0.995308 0.995321 +0.995334 0.995347 0.995361 0.995374 0.995387 0.9954 0.995413 0.995425 +0.995438 0.995451 0.995464 0.995477 0.99549 0.995503 0.995516 0.995528 +0.995541 0.995554 0.995567 0.995579 0.995592 0.995605 0.995618 0.99563 +0.995643 0.995655 0.995668 0.995681 0.995693 0.995706 0.995718 0.995731 +0.995743 0.995756 0.995768 0.995781 0.995793 0.995805 0.995818 0.99583 +0.995843 0.995855 0.995867 0.995879 0.995892 0.995904 0.995916 0.995928 +0.995941 0.995953 0.995965 0.995977 0.995989 0.996001 0.996013 0.996026 +0.996038 0.99605 0.996062 0.996074 0.996086 0.996098 0.99611 0.996121 +0.996133 0.996145 0.996157 0.996169 0.996181 0.996193 0.996204 0.996216 +0.996228 0.99624 0.996252 0.996263 0.996275 0.996287 0.996298 0.99631 +0.996321 0.996333 0.996345 0.996356 0.996368 0.996379 0.996391 0.996402 +0.996414 0.996425 0.996437 0.996448 0.996459 0.996471 0.996482 0.996494 +0.996505 0.996516 0.996527 0.996539 0.99655 0.996561 0.996572 0.996584 +0.996595 0.996606 0.996617 0.996628 0.996639 0.99665 0.996661 0.996673 +0.996684 0.996695 0.996706 0.996717 0.996728 0.996738 0.996749 0.99676 +0.996771 0.996782 0.996793 0.996804 0.996815 0.996825 0.996836 0.996847 +0.996858 0.996868 0.996879 0.99689 0.9969 0.996911 0.996922 0.996932 +0.996943 0.996953 0.996964 0.996975 0.996985 0.996996 0.997006 0.997017 +0.997027 0.997037 0.997048 0.997058 0.997069 0.997079 0.997089 0.9971 +0.99711 0.99712 0.997131 0.997141 0.997151 0.997161 0.997171 0.997182 +0.997192 0.997202 0.997212 0.997222 0.997232 0.997242 0.997252 0.997262 +0.997272 0.997282 0.997292 0.997302 0.997312 0.997322 0.997332 0.997342 +0.997352 0.997362 0.997371 0.997381 0.997391 0.997401 0.997411 0.99742 +0.99743 0.99744 0.997449 0.997459 0.997469 0.997478 0.997488 0.997497 +0.997507 0.997517 0.997526 0.997536 0.997545 0.997555 0.997564 0.997574 +0.997583 0.997592 0.997602 0.997611 0.99762 0.99763 0.997639 0.997648 +0.997658 0.997667 0.997676 0.997685 0.997695 0.997704 0.997713 0.997722 +0.997731 0.99774 0.997749 0.997759 0.997768 0.997777 0.997786 0.997795 +0.997804 0.997813 0.997822 0.997831 0.997839 0.997848 0.997857 0.997866 +0.997875 0.997884 0.997892 0.997901 0.99791 0.997919 0.997928 0.997936 +0.997945 0.997954 0.997962 0.997971 0.99798 0.997988 0.997997 0.998005 +0.998014 0.998022 0.998031 0.998039 0.998048 0.998056 0.998065 0.998073 +0.998082 0.99809 0.998098 0.998107 0.998115 0.998123 0.998132 0.99814 +0.998148 0.998156 0.998165 0.998173 0.998181 0.998189 0.998197 0.998205 +0.998213 0.998222 0.99823 0.998238 0.998246 0.998254 0.998262 0.99827 +0.998278 0.998286 0.998294 0.998301 0.998309 0.998317 0.998325 0.998333 +0.998341 0.998348 0.998356 0.998364 0.998372 0.998379 0.998387 0.998395 +0.998402 0.99841 0.998418 0.998425 0.998433 0.998441 0.998448 0.998456 +0.998463 0.998471 0.998478 0.998486 0.998493 0.998501 0.998508 0.998515 +0.998523 0.99853 0.998537 0.998545 0.998552 0.998559 0.998567 0.998574 +0.998581 0.998588 0.998595 0.998603 0.99861 0.998617 0.998624 0.998631 +0.998638; +#A 16000 0.998645 0.998652 0.998659 0.998666 0.998673 0.99868 0.998687 +0.998694 0.998701 0.998708 0.998715 0.998722 0.998729 0.998735 0.998742 +0.998749 0.998756 0.998762 0.998769 0.998776 0.998783 0.998789 0.998796 +0.998803 0.998809 0.998816 0.998822 0.998829 0.998836 0.998842 0.998849 +0.998855 0.998862 0.998868 0.998874 0.998881 0.998887 0.998894 0.9989 +0.998906 0.998913 0.998919 0.998925 0.998932 0.998938 0.998944 0.99895 +0.998956 0.998963 0.998969 0.998975 0.998981 0.998987 0.998993 0.998999 +0.999005 0.999011 0.999017 0.999023 0.999029 0.999035 0.999041 0.999047 +0.999053 0.999059 0.999065 0.999071 0.999077 0.999082 0.999088 0.999094 +0.9991 0.999106 0.999111 0.999117 0.999123 0.999128 0.999134 0.99914 +0.999145 0.999151 0.999156 0.999162 0.999167 0.999173 0.999178 0.999184 +0.999189 0.999195 0.9992 0.999206 0.999211 0.999216 0.999222 0.999227 +0.999232 0.999238 0.999243 0.999248 0.999254 0.999259 0.999264 0.999269 +0.999274 0.99928 0.999285 0.99929 0.999295 0.9993 0.999305 0.99931 +0.999315 0.99932 0.999325 0.99933 0.999335 0.99934 0.999345 0.99935 +0.999355 0.999359 0.999364 0.999369 0.999374 0.999379 0.999384 0.999388 +0.999393 0.999398 0.999402 0.999407 0.999412 0.999416 0.999421 0.999426 +0.99943 0.999435 0.999439 0.999444 0.999448 0.999453 0.999457 0.999462 +0.999466 0.999471 0.999475 0.999479 0.999484 0.999488 0.999492 0.999497 +0.999501 0.999505 0.99951 0.999514 0.999518 0.999522 0.999526 0.999531 +0.999535 0.999539 0.999543 0.999547 0.999551 0.999555 0.999559 0.999563 +0.999567 0.999571 0.999575 0.999579 0.999583 0.999587 0.999591 0.999595 +0.999599 0.999602 0.999606 0.99961 0.999614 0.999618 0.999621 0.999625 +0.999629 0.999632 0.999636 0.99964 0.999643 0.999647 0.999651 0.999654 +0.999658 0.999661 0.999665 0.999668 0.999672 0.999675 0.999679 0.999682 +0.999685 0.999689 0.999692 0.999696 0.999699 0.999702 0.999705 0.999709 +0.999712 0.999715 0.999719 0.999722 0.999725 0.999728 0.999731 0.999734 +0.999738 0.999741 0.999744 0.999747 0.99975 0.999753 0.999756 0.999759 +0.999762 0.999765 0.999768 0.999771 0.999773 0.999776 0.999779 0.999782 +0.999785 0.999788 0.99979 0.999793 0.999796 0.999799 0.999801 0.999804 +0.999807 0.999809 0.999812 0.999815 0.999817 0.99982 0.999822 0.999825 +0.999828 0.99983 0.999833 0.999835 0.999837 0.99984 0.999842 0.999845 +0.999847 0.999849 0.999852 0.999854 0.999856 0.999859 0.999861 0.999863 +0.999865 0.999868 0.99987 0.999872 0.999874 0.999876 0.999878 0.999881 +0.999883 0.999885 0.999887 0.999889 0.999891 0.999893 0.999895 0.999897 +0.999899 0.999901 0.999902 0.999904 0.999906 0.999908 0.99991 0.999912 +0.999914 0.999915 0.999917 0.999919 0.99992 0.999922 0.999924 0.999926 +0.999927 0.999929 0.99993 0.999932 0.999934 0.999935 0.999937 0.999938 +0.99994 0.999941 0.999943 0.999944 0.999946 0.999947 0.999948 0.99995 +0.999951 0.999952 0.999954 0.999955 0.999956 0.999958 0.999959 0.99996 +0.999961 0.999962 0.999964 0.999965 0.999966 0.999967 0.999968 0.999969 +0.99997 0.999971 0.999972 0.999973 0.999974 0.999975 0.999976 0.999977 +0.999978 0.999979 0.99998 0.999981 0.999981 0.999982 0.999983 0.999984 +0.999985 0.999985 0.999986 0.999987 0.999987 0.999988 0.999989 0.999989 +0.99999 0.999991 0.999991 0.999992 0.999992 0.999993 0.999993 0.999994 +0.999994 0.999995 0.999995 0.999996 0.999996 0.999996 0.999997 0.999997 +0.999997 0.999998 0.999998 0.999998 0.999998 0.999999 0.999999 0.999999 +0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 0.999999 +0.999999 0.999999 0.999998 0.999998 0.999998 0.999998 0.999997 0.999997 +0.999997 0.999996 0.999996 0.999996 0.999995 0.999995 0.999994 0.999994 +0.999993 0.999993 0.999992 0.999992 0.999991 0.999991 0.99999 0.999989 +0.999989 0.999988 0.999987 0.999987 0.999986 0.999985 0.999985 0.999984 +0.999983 0.999982 0.999981 0.999981 0.99998 0.999979 0.999978 0.999977 +0.999976 0.999975 0.999974 0.999973 0.999972 0.999971 0.99997 0.999969 +0.999968 0.999967 0.999966 0.999965 0.999964 0.999962 0.999961 0.99996 +0.999959 0.999958 0.999956 0.999955 0.999954 0.999952 0.999951 0.99995 +0.999948 0.999947 0.999946 0.999944 0.999943 0.999941 0.99994 0.999938 +0.999937 0.999935 0.999934 0.999932 0.99993 0.999929 0.999927 0.999926 +0.999924 0.999922 0.99992 0.999919 0.999917 0.999915 0.999914 0.999912 +0.99991 0.999908 0.999906 0.999904 0.999902 0.999901 0.999899 0.999897 +0.999895 0.999893 0.999891 0.999889 0.999887 0.999885 0.999883 0.999881 +0.999878 0.999876 0.999874 0.999872 0.99987 0.999868 0.999865 0.999863 +0.999861 0.999859 0.999856 0.999854 0.999852 0.999849 0.999847 0.999845 +0.999842 0.99984 0.999837 0.999835 0.999833 0.99983 0.999828 0.999825 +0.999822 0.99982 0.999817 0.999815 0.999812 0.999809 0.999807 0.999804 +0.999801 0.999799 0.999796 0.999793 0.99979 0.999788 0.999785 0.999782 +0.999779 0.999776 0.999773 0.999771 0.999768 0.999765 0.999762 0.999759 +0.999756 0.999753 0.99975 0.999747 0.999744 0.999741 0.999738 0.999734 +0.999731 0.999728 0.999725 0.999722 0.999719 0.999715 0.999712 0.999709 +0.999705 0.999702 0.999699 0.999696 0.999692 0.999689 0.999685 0.999682 +0.999679 0.999675 0.999672 0.999668 0.999665 0.999661 0.999658 0.999654 +0.999651 0.999647 0.999643 0.99964 0.999636 0.999632 0.999629 0.999625 +0.999621 0.999618 0.999614 0.99961 0.999606 0.999602 0.999599 0.999595 +0.999591 0.999587 0.999583 0.999579 0.999575 0.999571 0.999567 0.999563 +0.999559 0.999555 0.999551 0.999547 0.999543 0.999539 0.999535 0.999531 +0.999526 0.999522 0.999518 0.999514 0.99951 0.999505 0.999501 0.999497 +0.999492 0.999488 0.999484 0.999479 0.999475 0.999471 0.999466 0.999462 +0.999457 0.999453 0.999448 0.999444 0.999439 0.999435 0.99943 0.999426 +0.999421 0.999416 0.999412 0.999407 0.999402 0.999398 0.999393 0.999388 +0.999384 0.999379 0.999374 0.999369 0.999364 0.999359 0.999355 0.99935 +0.999345 0.99934 0.999335 0.99933 0.999325 0.99932 0.999315 0.99931 +0.999305 0.9993 0.999295 0.99929 0.999285 0.99928 0.999274 0.999269 +0.999264 0.999259 0.999254 0.999248 0.999243 0.999238 0.999232 0.999227 +0.999222 0.999216 0.999211 0.999206 0.9992 0.999195 0.999189 0.999184 +0.999178 0.999173 0.999167 0.999162 0.999156 0.999151 0.999145 0.99914 +0.999134 0.999128 0.999123 0.999117 0.999111 0.999106 0.9991 0.999094 +0.999088 0.999082 0.999077 0.999071 0.999065 0.999059 0.999053 0.999047 +0.999041 0.999035 0.999029 0.999023 0.999017 0.999011 0.999005 0.998999 +0.998993 0.998987 0.998981 0.998975 0.998969 0.998963 0.998956 0.99895 +0.998944 0.998938 0.998932 0.998925 0.998919 0.998913 0.998906 0.9989 +0.998894 0.998887 0.998881 0.998874 0.998868 0.998862 0.998855 0.998849 +0.998842 0.998836 0.998829 0.998822 0.998816 0.998809 0.998803 0.998796 +0.998789 0.998783 0.998776 0.998769 0.998762 0.998756 0.998749 0.998742 +0.998735 0.998729 0.998722 0.998715 0.998708 0.998701 0.998694 0.998687 +0.99868 0.998673 0.998666 0.998659 0.998652 0.998645 0.998638 0.998631 +0.998624 0.998617 0.99861 0.998603 0.998595 0.998588 0.998581 0.998574 +0.998567 0.998559 0.998552 0.998545 0.998537 0.99853 0.998523 0.998515 +0.998508 0.998501 0.998493 0.998486 0.998478 0.998471 0.998463 0.998456 +0.998448 0.998441 0.998433 0.998425 0.998418 0.99841 0.998402 0.998395 +0.998387 0.998379 0.998372 0.998364 0.998356 0.998348 0.998341 0.998333 +0.998325 0.998317 0.998309 0.998301 0.998294 0.998286 0.998278 0.99827 +0.998262 0.998254 0.998246 0.998238 0.99823 0.998222 0.998213 0.998205 +0.998197 0.998189 0.998181 0.998173 0.998165 0.998156 0.998148 0.99814 +0.998132 0.998123 0.998115 0.998107 0.998098 0.99809 0.998082 0.998073 +0.998065 0.998056 0.998048 0.998039 0.998031 0.998022 0.998014 0.998005 +0.997997 0.997988 0.99798 0.997971 0.997962 0.997954 0.997945 0.997936 +0.997928 0.997919 0.99791 0.997901 0.997892 0.997884 0.997875 0.997866 +0.997857 0.997848 0.997839 0.997831 0.997822 0.997813 0.997804 0.997795 +0.997786 0.997777 0.997768 0.997759 0.997749 0.99774 0.997731 0.997722 +0.997713 0.997704 0.997695 0.997685 0.997676 0.997667 0.997658 0.997648 +0.997639 0.99763 0.99762 0.997611 0.997602 0.997592 0.997583 0.997574 +0.997564 0.997555 0.997545 0.997536 0.997526 0.997517 0.997507 0.997497 +0.997488 0.997478 0.997469 0.997459 0.997449 0.99744 0.99743 0.99742 +0.997411 0.997401 0.997391 0.997381 0.997371 0.997362 0.997352 0.997342 +0.997332 0.997322 0.997312 0.997302 0.997292 0.997282 0.997272 0.997262 +0.997252 0.997242 0.997232 0.997222 0.997212 0.997202 0.997192 0.997182 +0.997171 0.997161 0.997151 0.997141 0.997131 0.99712 0.99711 0.9971 +0.997089 0.997079 0.997069 0.997058 0.997048 0.997037 0.997027 0.997017 +0.997006 0.996996 0.996985 0.996975 0.996964 0.996953 0.996943 0.996932 +0.996922 0.996911 0.9969 0.99689 0.996879 0.996868 0.996858 0.996847 +0.996836 0.996825 0.996815 0.996804 0.996793 0.996782 0.996771 0.99676 +0.996749 0.996738 0.996728 0.996717 0.996706 0.996695 0.996684 0.996673 +0.996661 0.99665 0.996639 0.996628 0.996617 0.996606 0.996595 0.996584 +0.996572 0.996561 0.99655 0.996539 0.996527; +#A 17000 0.996516 0.996505 0.996494 0.996482 0.996471 0.996459 0.996448 +0.996437 0.996425 0.996414 0.996402 0.996391 0.996379 0.996368 0.996356 +0.996345 0.996333 0.996321 0.99631 0.996298 0.996287 0.996275 0.996263 +0.996252 0.99624 0.996228 0.996216 0.996204 0.996193 0.996181 0.996169 +0.996157 0.996145 0.996133 0.996121 0.99611 0.996098 0.996086 0.996074 +0.996062 0.99605 0.996038 0.996026 0.996013 0.996001 0.995989 0.995977 +0.995965 0.995953 0.995941 0.995928 0.995916 0.995904 0.995892 0.995879 +0.995867 0.995855 0.995843 0.99583 0.995818 0.995805 0.995793 0.995781 +0.995768 0.995756 0.995743 0.995731 0.995718 0.995706 0.995693 0.995681 +0.995668 0.995655 0.995643 0.99563 0.995618 0.995605 0.995592 0.995579 +0.995567 0.995554 0.995541 0.995528 0.995516 0.995503 0.99549 0.995477 +0.995464 0.995451 0.995438 0.995425 0.995413 0.9954 0.995387 0.995374 +0.995361 0.995347 0.995334 0.995321 0.995308 0.995295 0.995282 0.995269 +0.995256 0.995243 0.995229 0.995216 0.995203 0.99519 0.995176 0.995163 +0.99515 0.995136 0.995123 0.99511 0.995096 0.995083 0.99507 0.995056 +0.995043 0.995029 0.995016 0.995002 0.994989 0.994975 0.994961 0.994948 +0.994934 0.994921 0.994907 0.994893 0.99488 0.994866 0.994852 0.994839 +0.994825 0.994811 0.994797 0.994783 0.99477 0.994756 0.994742 0.994728 +0.994714 0.9947 0.994686 0.994672 0.994658 0.994644 0.99463 0.994616 +0.994602 0.994588 0.994574 0.99456 0.994546 0.994532 0.994518 0.994503 +0.994489 0.994475 0.994461 0.994447 0.994432 0.994418 0.994404 0.99439 +0.994375 0.994361 0.994346 0.994332 0.994318 0.994303 0.994289 0.994274 +0.99426 0.994245 0.994231 0.994216 0.994202 0.994187 0.994173 0.994158 +0.994143 0.994129 0.994114 0.994099 0.994085 0.99407 0.994055 0.994041 +0.994026 0.994011 0.993996 0.993981 0.993967 0.993952 0.993937 0.993922 +0.993907 0.993892 0.993877 0.993862 0.993847 0.993832 0.993817 0.993802 +0.993787 0.993772 0.993757 0.993742 0.993727 0.993711 0.993696 0.993681 +0.993666 0.993651 0.993635 0.99362 0.993605 0.99359 0.993574 0.993559 +0.993544 0.993528 0.993513 0.993497 0.993482 0.993467 0.993451 0.993436 +0.99342 0.993405 0.993389 0.993374 0.993358 0.993342 0.993327 0.993311 +0.993296 0.99328 0.993264 0.993249 0.993233 0.993217 0.993201 0.993186 +0.99317 0.993154 0.993138 0.993122 0.993107 0.993091 0.993075 0.993059 +0.993043 0.993027 0.993011 0.992995 0.992979 0.992963 0.992947 0.992931 +0.992915 0.992899 0.992883 0.992867 0.99285 0.992834 0.992818 0.992802 +0.992786 0.992769 0.992753 0.992737 0.992721 0.992704 0.992688 0.992672 +0.992655 0.992639 0.992622 0.992606 0.99259 0.992573 0.992557 0.99254 +0.992524 0.992507 0.992491 0.992474 0.992457 0.992441 0.992424 0.992408 +0.992391 0.992374 0.992358 0.992341 0.992324 0.992307 0.992291 0.992274 +0.992257 0.99224 0.992223 0.992207 0.99219 0.992173 0.992156 0.992139 +0.992122 0.992105 0.992088 0.992071 0.992054 0.992037 0.99202 0.992003 +0.991986 0.991969 0.991952 0.991934 0.991917 0.9919 0.991883 0.991866 +0.991848 0.991831 0.991814 0.991797 0.991779 0.991762 0.991745 0.991727 +0.99171 0.991693 0.991675 0.991658 0.99164 0.991623 0.991605 0.991588 +0.99157 0.991553 0.991535 0.991518 0.9915 0.991482 0.991465 0.991447 +0.991429 0.991412 0.991394 0.991376 0.991359 0.991341 0.991323 0.991305 +0.991287 0.99127 0.991252 0.991234 0.991216 0.991198 0.99118 0.991162 +0.991144 0.991126 0.991108 0.99109 0.991072 0.991054 0.991036 0.991018 +0.991 0.990982 0.990964 0.990946 0.990927 0.990909 0.990891 0.990873 +0.990855 0.990836 0.990818 0.9908 0.990781 0.990763 0.990745 0.990726 +0.990708 0.99069 0.990671 0.990653 0.990634 0.990616 0.990597 0.990579 +0.99056 0.990542 0.990523 0.990505 0.990486 0.990467 0.990449 0.99043 +0.990411 0.990393 0.990374 0.990355 0.990336 0.990318 0.990299 0.99028 +0.990261 0.990242 0.990224 0.990205 0.990186 0.990167 0.990148 0.990129 +0.99011 0.990091 0.990072 0.990053 0.990034 0.990015 0.989996 0.989977 +0.989958 0.989939 0.989919 0.9899 0.989881 0.989862 0.989843 0.989823 +0.989804 0.989785 0.989766 0.989746 0.989727 0.989708 0.989688 0.989669 +0.989649 0.98963 0.989611 0.989591 0.989572 0.989552 0.989533 0.989513 +0.989494 0.989474 0.989455 0.989435 0.989415 0.989396 0.989376 0.989356 +0.989337 0.989317 0.989297 0.989277 0.989258 0.989238 0.989218 0.989198 +0.989179 0.989159 0.989139 0.989119 0.989099 0.989079 0.989059 0.989039 +0.989019 0.988999 0.988979 0.988959 0.988939 0.988919 0.988899 0.988879 +0.988859 0.988839 0.988819 0.988798 0.988778 0.988758 0.988738 0.988717 +0.988697 0.988677 0.988657 0.988636 0.988616 0.988596 0.988575 0.988555 +0.988535 0.988514 0.988494 0.988473 0.988453 0.988432 0.988412 0.988391 +0.988371 0.98835 0.988329 0.988309 0.988288 0.988268 0.988247 0.988226 +0.988206 0.988185 0.988164 0.988143 0.988123 0.988102 0.988081 0.98806 +0.988039 0.988019 0.987998 0.987977 0.987956 0.987935 0.987914 0.987893 +0.987872 0.987851 0.98783 0.987809 0.987788 0.987767 0.987746 0.987725 +0.987704 0.987682 0.987661 0.98764 0.987619 0.987598 0.987576 0.987555 +0.987534 0.987513 0.987491 0.98747 0.987449 0.987427 0.987406 0.987385 +0.987363 0.987342 0.98732 0.987299 0.987277 0.987256 0.987234 0.987213 +0.987191 0.98717 0.987148 0.987126 0.987105 0.987083 0.987062 0.98704 +0.987018 0.986996 0.986975 0.986953 0.986931 0.986909 0.986888 0.986866 +0.986844 0.986822 0.9868 0.986778 0.986756 0.986735 0.986713 0.986691 +0.986669 0.986647 0.986625 0.986603 0.98658 0.986558 0.986536 0.986514 +0.986492 0.98647 0.986448 0.986426 0.986403 0.986381 0.986359 0.986337 +0.986314 0.986292 0.98627 0.986248 0.986225 0.986203 0.98618 0.986158 +0.986136 0.986113 0.986091 0.986068 0.986046 0.986023 0.986001 0.985978 +0.985956 0.985933 0.985911 0.985888 0.985865 0.985843 0.98582 0.985797 +0.985775 0.985752 0.985729 0.985706 0.985684 0.985661 0.985638 0.985615 +0.985592 0.98557 0.985547 0.985524 0.985501 0.985478 0.985455 0.985432 +0.985409 0.985386 0.985363 0.98534 0.985317 0.985294 0.985271 0.985248 +0.985225 0.985201 0.985178 0.985155 0.985132 0.985109 0.985085 0.985062 +0.985039 0.985016 0.984992 0.984969 0.984946 0.984922 0.984899 0.984876 +0.984852 0.984829 0.984805 0.984782 0.984758 0.984735 0.984711 0.984688 +0.984664 0.984641 0.984617 0.984593 0.98457 0.984546 0.984523 0.984499 +0.984475 0.984451 0.984428 0.984404 0.98438 0.984356 0.984333 0.984309 +0.984285 0.984261 0.984237 0.984213 0.984189 0.984165 0.984141 0.984118 +0.984094 0.98407 0.984046 0.984021 0.983997 0.983973 0.983949 0.983925 +0.983901 0.983877 0.983853 0.983829 0.983804 0.98378 0.983756 0.983732 +0.983707 0.983683 0.983659 0.983635 0.98361 0.983586 0.983561 0.983537 +0.983513 0.983488 0.983464 0.983439 0.983415 0.98339 0.983366 0.983341 +0.983317 0.983292 0.983268 0.983243 0.983218 0.983194 0.983169 0.983144 +0.98312 0.983095 0.98307 0.983046 0.983021 0.982996 0.982971 0.982946 +0.982922 0.982897 0.982872 0.982847 0.982822 0.982797 0.982772 0.982747 +0.982722 0.982697 0.982672 0.982647 0.982622 0.982597 0.982572 0.982547 +0.982522 0.982497 0.982471 0.982446 0.982421 0.982396 0.982371 0.982345 +0.98232 0.982295 0.98227 0.982244 0.982219 0.982194 0.982168 0.982143 +0.982117 0.982092 0.982067 0.982041 0.982016 0.98199 0.981965 0.981939 +0.981914 0.981888 0.981862 0.981837 0.981811 0.981786 0.98176 0.981734 +0.981709 0.981683 0.981657 0.981631 0.981606 0.98158 0.981554 0.981528 +0.981502 0.981477 0.981451 0.981425 0.981399 0.981373 0.981347 0.981321 +0.981295 0.981269 0.981243 0.981217 0.981191 0.981165 0.981139 0.981113 +0.981087 0.981061 0.981035 0.981008 0.980982 0.980956 0.98093 0.980904 +0.980877 0.980851 0.980825 0.980798 0.980772 0.980746 0.980719 0.980693 +0.980667 0.98064 0.980614 0.980587 0.980561 0.980534 0.980508 0.980481 +0.980455 0.980428 0.980402 0.980375 0.980349 0.980322 0.980295 0.980269 +0.980242 0.980215 0.980189 0.980162 0.980135 0.980108 0.980081 0.980055 +0.980028 0.980001 0.979974 0.979947 0.97992 0.979894 0.979867 0.97984 +0.979813 0.979786 0.979759 0.979732 0.979705 0.979678 0.979651 0.979624 +0.979596 0.979569 0.979542 0.979515 0.979488 0.979461 0.979433 0.979406 +0.979379 0.979352 0.979324 0.979297 0.97927 0.979243 0.979215 0.979188 +0.97916 0.979133 0.979106 0.979078 0.979051 0.979023 0.978996 0.978968 +0.978941 0.978913 0.978886 0.978858 0.97883 0.978803 0.978775 0.978748 +0.97872 0.978692 0.978665 0.978637 0.978609 0.978581 0.978554 0.978526 +0.978498 0.97847 0.978442 0.978414 0.978387 0.978359 0.978331 0.978303 +0.978275 0.978247 0.978219 0.978191 0.978163 0.978135 0.978107 0.978079 +0.978051 0.978023 0.977995 0.977966 0.977938 0.97791 0.977882 0.977854 +0.977825 0.977797 0.977769 0.977741 0.977712 0.977684 0.977656 0.977627 +0.977599 0.977571 0.977542 0.977514 0.977485 0.977457 0.977428 0.9774 +0.977371 0.977343 0.977314 0.977286 0.977257 0.977229 0.9772 0.977171 +0.977143 0.977114 0.977085 0.977057 0.977028 0.976999 0.97697 0.976942 +0.976913 0.976884 0.976855 0.976826 0.976798 0.976769 0.97674 0.976711 +0.976682 0.976653 0.976624 0.976595 0.976566 0.976537 0.976508 0.976479 +0.97645 0.976421 0.976392 0.976363 0.976333 0.976304 0.976275 0.976246 +0.976217; +#A 18000 0.976188 0.976158 0.976129 0.9761 0.97607 0.976041 0.976012 +0.975982 0.975953 0.975924 0.975894 0.975865 0.975835 0.975806 0.975776 +0.975747 0.975717 0.975688 0.975658 0.975629 0.975599 0.97557 0.97554 +0.97551 0.975481 0.975451 0.975421 0.975392 0.975362 0.975332 0.975303 +0.975273 0.975243 0.975213 0.975183 0.975154 0.975124 0.975094 0.975064 +0.975034 0.975004 0.974974 0.974944 0.974914 0.974884 0.974854 0.974824 +0.974794 0.974764 0.974734 0.974704 0.974674 0.974644 0.974613 0.974583 +0.974553 0.974523 0.974493 0.974462 0.974432 0.974402 0.974372 0.974341 +0.974311 0.974281 0.97425 0.97422 0.97419 0.974159 0.974129 0.974098 +0.974068 0.974037 0.974007 0.973976 0.973946 0.973915 0.973885 0.973854 +0.973823 0.973793 0.973762 0.973732 0.973701 0.97367 0.973639 0.973609 +0.973578 0.973547 0.973516 0.973486 0.973455 0.973424 0.973393 0.973362 +0.973331 0.9733 0.97327 0.973239 0.973208 0.973177 0.973146 0.973115 +0.973084 0.973053 0.973022 0.97299 0.972959 0.972928 0.972897 0.972866 +0.972835 0.972804 0.972772 0.972741 0.97271 0.972679 0.972647 0.972616 +0.972585 0.972554 0.972522 0.972491 0.97246 0.972428 0.972397 0.972365 +0.972334 0.972302 0.972271 0.972239 0.972208 0.972176 0.972145 0.972113 +0.972082 0.97205 0.972019 0.971987 0.971955 0.971924 0.971892 0.97186 +0.971828 0.971797 0.971765 0.971733 0.971701 0.97167 0.971638 0.971606 +0.971574 0.971542 0.97151 0.971478 0.971447 0.971415 0.971383 0.971351 +0.971319 0.971287 0.971255 0.971223 0.97119 0.971158 0.971126 0.971094 +0.971062 0.97103 0.970998 0.970966 0.970933 0.970901 0.970869 0.970837 +0.970804 0.970772 0.97074 0.970707 0.970675 0.970643 0.97061 0.970578 +0.970546 0.970513 0.970481 0.970448 0.970416 0.970383 0.970351 0.970318 +0.970286 0.970253 0.97022 0.970188 0.970155 0.970123 0.97009 0.970057 +0.970025 0.969992 0.969959 0.969926 0.969894 0.969861 0.969828 0.969795 +0.969762 0.96973 0.969697 0.969664 0.969631 0.969598 0.969565 0.969532 +0.969499 0.969466 0.969433 0.9694 0.969367 0.969334 0.969301 0.969268 +0.969235 0.969202 0.969169 0.969135 0.969102 0.969069 0.969036 0.969003 +0.968969 0.968936 0.968903 0.96887 0.968836 0.968803 0.96877 0.968736 +0.968703 0.96867 0.968636 0.968603 0.968569 0.968536 0.968502 0.968469 +0.968435 0.968402 0.968368 0.968335 0.968301 0.968267 0.968234 0.9682 +0.968167 0.968133 0.968099 0.968065 0.968032 0.967998 0.967964 0.96793 +0.967897 0.967863 0.967829 0.967795 0.967761 0.967727 0.967694 0.96766 +0.967626 0.967592 0.967558 0.967524 0.96749 0.967456 0.967422 0.967388 +0.967354 0.96732 0.967285 0.967251 0.967217 0.967183 0.967149 0.967115 +0.96708 0.967046 0.967012 0.966978 0.966944 0.966909 0.966875 0.966841 +0.966806 0.966772 0.966738 0.966703 0.966669 0.966634 0.9666 0.966565 +0.966531 0.966496 0.966462 0.966427 0.966393 0.966358 0.966324 0.966289 +0.966254 0.96622 0.966185 0.966151 0.966116 0.966081 0.966046 0.966012 +0.965977 0.965942 0.965907 0.965873 0.965838 0.965803 0.965768 0.965733 +0.965698 0.965663 0.965628 0.965594 0.965559 0.965524 0.965489 0.965454 +0.965419 0.965383 0.965348 0.965313 0.965278 0.965243 0.965208 0.965173 +0.965138 0.965102 0.965067 0.965032 0.964997 0.964962 0.964926 0.964891 +0.964856 0.96482 0.964785 0.96475 0.964714 0.964679 0.964644 0.964608 +0.964573 0.964537 0.964502 0.964466 0.964431 0.964395 0.96436 0.964324 +0.964289 0.964253 0.964217 0.964182 0.964146 0.96411 0.964075 0.964039 +0.964003 0.963968 0.963932 0.963896 0.96386 0.963825 0.963789 0.963753 +0.963717 0.963681 0.963645 0.963609 0.963574 0.963538 0.963502 0.963466 +0.96343 0.963394 0.963358 0.963322 0.963286 0.96325 0.963214 0.963177 +0.963141 0.963105 0.963069 0.963033 0.962997 0.96296 0.962924 0.962888 +0.962852 0.962815 0.962779 0.962743 0.962707 0.96267 0.962634 0.962597 +0.962561 0.962525 0.962488 0.962452 0.962415 0.962379 0.962342 0.962306 +0.962269 0.962233 0.962196 0.96216 0.962123 0.962086 0.96205 0.962013 +0.961976 0.96194 0.961903 0.961866 0.96183 0.961793 0.961756 0.961719 +0.961682 0.961646 0.961609 0.961572 0.961535 0.961498 0.961461 0.961424 +0.961388 0.961351 0.961314 0.961277 0.96124 0.961203 0.961166 0.961128 +0.961091 0.961054 0.961017 0.96098 0.960943 0.960906 0.960869 0.960831 +0.960794 0.960757 0.96072 0.960683 0.960645 0.960608 0.960571 0.960533 +0.960496 0.960459 0.960421 0.960384 0.960346 0.960309 0.960272 0.960234 +0.960197 0.960159 0.960122 0.960084 0.960047 0.960009 0.959971 0.959934 +0.959896 0.959859 0.959821 0.959783 0.959746 0.959708 0.95967 0.959632 +0.959595 0.959557 0.959519 0.959481 0.959444 0.959406 0.959368 0.95933 +0.959292 0.959254 0.959216 0.959178 0.95914 0.959102 0.959064 0.959026 +0.958988 0.95895 0.958912 0.958874 0.958836 0.958798 0.95876 0.958722 +0.958684 0.958646 0.958607 0.958569 0.958531 0.958493 0.958454 0.958416 +0.958378 0.95834 0.958301 0.958263 0.958225 0.958186 0.958148 0.958109 +0.958071 0.958032 0.957994 0.957956 0.957917 0.957879 0.95784 0.957801 +0.957763 0.957724 0.957686 0.957647 0.957609 0.95757 0.957531 0.957493 +0.957454 0.957415 0.957376 0.957338 0.957299 0.95726 0.957221 0.957183 +0.957144 0.957105 0.957066 0.957027 0.956988 0.956949 0.95691 0.956871 +0.956833 0.956794 0.956755 0.956716 0.956676 0.956637 0.956598 0.956559 +0.95652 0.956481 0.956442 0.956403 0.956364 0.956324 0.956285 0.956246 +0.956207 0.956168 0.956128 0.956089 0.95605 0.95601 0.955971 0.955932 +0.955892 0.955853 0.955814 0.955774 0.955735 0.955695 0.955656 0.955616 +0.955577 0.955537 0.955498 0.955458 0.955419 0.955379 0.95534 0.9553 +0.95526 0.955221 0.955181 0.955141 0.955102 0.955062 0.955022 0.954982 +0.954943 0.954903 0.954863 0.954823 0.954783 0.954744 0.954704 0.954664 +0.954624 0.954584 0.954544 0.954504 0.954464 0.954424 0.954384 0.954344 +0.954304 0.954264 0.954224 0.954184 0.954144 0.954104 0.954064 0.954023 +0.953983 0.953943 0.953903 0.953863 0.953822 0.953782 0.953742 0.953702 +0.953661 0.953621 0.953581 0.95354 0.9535 0.95346 0.953419 0.953379 +0.953338 0.953298 0.953257 0.953217 0.953176 0.953136 0.953095 0.953055 +0.953014 0.952974 0.952933 0.952892 0.952852 0.952811 0.95277 0.95273 +0.952689 0.952648 0.952608 0.952567 0.952526 0.952485 0.952445 0.952404 +0.952363 0.952322 0.952281 0.95224 0.952199 0.952158 0.952118 0.952077 +0.952036 0.951995 0.951954 0.951913 0.951872 0.951831 0.951789 0.951748 +0.951707 0.951666 0.951625 0.951584 0.951543 0.951502 0.95146 0.951419 +0.951378 0.951337 0.951295 0.951254 0.951213 0.951172 0.95113 0.951089 +0.951047 0.951006 0.950965 0.950923 0.950882 0.95084 0.950799 0.950757 +0.950716 0.950674 0.950633 0.950591 0.95055 0.950508 0.950467 0.950425 +0.950383 0.950342 0.9503 0.950258 0.950217 0.950175 0.950133 0.950091 +0.95005 0.950008 0.949966 0.949924 0.949883 0.949841 0.949799 0.949757 +0.949715 0.949673 0.949631 0.949589 0.949547 0.949505 0.949463 0.949421 +0.949379 0.949337 0.949295 0.949253 0.949211 0.949169 0.949127 0.949085 +0.949042 0.949 0.948958 0.948916 0.948874 0.948831 0.948789 0.948747 +0.948705 0.948662 0.94862 0.948578 0.948535 0.948493 0.948451 0.948408 +0.948366 0.948323 0.948281 0.948238 0.948196 0.948153 0.948111 0.948068 +0.948026 0.947983 0.947941 0.947898 0.947855 0.947813 0.94777 0.947727 +0.947685 0.947642 0.947599 0.947556 0.947514 0.947471 0.947428 0.947385 +0.947343 0.9473 0.947257 0.947214 0.947171 0.947128 0.947085 0.947042 +0.946999 0.946956 0.946913 0.946871 0.946827 0.946784 0.946741 0.946698 +0.946655 0.946612 0.946569 0.946526 0.946483 0.94644 0.946396 0.946353 +0.94631 0.946267 0.946224 0.94618 0.946137 0.946094 0.94605 0.946007 +0.945964 0.94592 0.945877 0.945834 0.94579 0.945747 0.945703 0.94566 +0.945616 0.945573 0.945529 0.945486 0.945442 0.945399 0.945355 0.945312 +0.945268 0.945224 0.945181 0.945137 0.945093 0.94505 0.945006 0.944962 +0.944919 0.944875 0.944831 0.944787 0.944743 0.9447 0.944656 0.944612 +0.944568 0.944524 0.94448 0.944436 0.944392 0.944348 0.944305 0.944261 +0.944217 0.944173 0.944129 0.944084 0.94404 0.943996 0.943952 0.943908 +0.943864 0.94382 0.943776 0.943731 0.943687 0.943643 0.943599 0.943555 +0.94351 0.943466 0.943422 0.943377 0.943333 0.943289 0.943244 0.9432 +0.943156 0.943111 0.943067 0.943022 0.942978 0.942933 0.942889 0.942845 +0.9428 0.942755 0.942711 0.942666 0.942622 0.942577 0.942532 0.942488 +0.942443 0.942399 0.942354 0.942309 0.942264 0.94222 0.942175 0.94213 +0.942085 0.942041 0.941996 0.941951 0.941906 0.941861 0.941816 0.941772 +0.941727 0.941682 0.941637 0.941592 0.941547 0.941502 0.941457 0.941412 +0.941367 0.941322 0.941277 0.941231 0.941186 0.941141 0.941096 0.941051 +0.941006 0.940961 0.940915 0.94087 0.940825 0.94078 0.940734 0.940689 +0.940644 0.940599 0.940553 0.940508 0.940463 0.940417 0.940372 0.940326 +0.940281 0.940235 0.94019 0.940144 0.940099 0.940054 0.940008 0.939962 +0.939917 0.939871 0.939826 0.93978 0.939734 0.939689 0.939643 0.939597 +0.939552 0.939506 0.93946 0.939415 0.939369 0.939323 0.939277 0.939232 +0.939186 0.93914 0.939094 0.939048 0.939002 0.938956 0.93891 0.938865 +0.938819 0.938773 0.938727 0.938681 0.938635 0.938589 0.938543 0.938497 +0.93845; +#A 19000 0.938404 0.938358 0.938312 0.938266 0.93822 0.938174 0.938127 +0.938081 0.938035 0.937989 0.937943 0.937896 0.93785 0.937804 0.937757 +0.937711 0.937665 0.937618 0.937572 0.937526 0.937479 0.937433 0.937386 +0.93734 0.937293 0.937247 0.9372 0.937154 0.937107 0.937061 0.937014 +0.936968 0.936921 0.936874 0.936828 0.936781 0.936734 0.936688 0.936641 +0.936594 0.936548 0.936501 0.936454 0.936407 0.93636 0.936314 0.936267 +0.93622 0.936173 0.936126 0.936079 0.936032 0.935985 0.935938 0.935892 +0.935845 0.935798 0.935751 0.935704 0.935656 0.935609 0.935562 0.935515 +0.935468 0.935421 0.935374 0.935327 0.93528 0.935232 0.935185 0.935138 +0.935091 0.935044 0.934996 0.934949 0.934902 0.934854 0.934807 0.93476 +0.934712 0.934665 0.934618 0.93457 0.934523 0.934475 0.934428 0.93438 +0.934333 0.934285 0.934238 0.93419 0.934143 0.934095 0.934048 0.934 +0.933952 0.933905 0.933857 0.933809 0.933762 0.933714 0.933666 0.933619 +0.933571 0.933523 0.933475 0.933428 0.93338 0.933332 0.933284 0.933236 +0.933188 0.93314 0.933093 0.933045 0.932997 0.932949 0.932901 0.932853 +0.932805 0.932757 0.932709 0.932661 0.932613 0.932565 0.932517 0.932468 +0.93242 0.932372 0.932324 0.932276 0.932228 0.932179 0.932131 0.932083 +0.932035 0.931986 0.931938 0.93189 0.931842 0.931793 0.931745 0.931696 +0.931648 0.9316 0.931551 0.931503 0.931454 0.931406 0.931358 0.931309 +0.931261 0.931212 0.931163 0.931115 0.931066 0.931018 0.930969 0.930921 +0.930872 0.930823 0.930775 0.930726 0.930677 0.930628 0.93058 0.930531 +0.930482 0.930433 0.930385 0.930336 0.930287 0.930238 0.930189 0.93014 +0.930092 0.930043 0.929994 0.929945 0.929896 0.929847 0.929798 0.929749 +0.9297 0.929651 0.929602 0.929553 0.929504 0.929455 0.929406 0.929356 +0.929307 0.929258 0.929209 0.92916 0.929111 0.929061 0.929012 0.928963 +0.928914 0.928864 0.928815 0.928766 0.928716 0.928667 0.928618 0.928568 +0.928519 0.928469 0.92842 0.928371 0.928321 0.928272 0.928222 0.928173 +0.928123 0.928074 0.928024 0.927975 0.927925 0.927875 0.927826 0.927776 +0.927727 0.927677 0.927627 0.927577 0.927528 0.927478 0.927428 0.927379 +0.927329 0.927279 0.927229 0.927179 0.92713 0.92708 0.92703 0.92698 +0.92693 0.92688 0.92683 0.92678 0.92673 0.92668 0.92663 0.92658 0.92653 +0.92648 0.92643 0.92638 0.92633 0.92628 0.92623 0.92618 0.92613 0.926079 +0.926029 0.925979 0.925929 0.925879 0.925828 0.925778 0.925728 0.925678 +0.925627 0.925577 0.925527 0.925476 0.925426 0.925376 0.925325 0.925275 +0.925224 0.925174 0.925123 0.925073 0.925022 0.924972 0.924921 0.924871 +0.92482 0.92477 0.924719 0.924669 0.924618 0.924567 0.924517 0.924466 +0.924415 0.924365 0.924314 0.924263 0.924212 0.924162 0.924111 0.92406 +0.924009 0.923959 0.923908 0.923857 0.923806 0.923755 0.923704 0.923653 +0.923602 0.923551 0.9235 0.92345 0.923399 0.923348 0.923297 0.923245 +0.923194 0.923143 0.923092 0.923041 0.92299 0.922939 0.922888 0.922837 +0.922785 0.922734 0.922683 0.922632 0.922581 0.922529 0.922478 0.922427 +0.922376 0.922324 0.922273 0.922221 0.92217 0.922119 0.922067 0.922016 +0.921965 0.921913 0.921862 0.92181 0.921759 0.921707 0.921656 0.921604 +0.921553 0.921501 0.921449 0.921398 0.921346 0.921295 0.921243 0.921191 +0.92114 0.921088 0.921036 0.920985 0.920933 0.920881 0.920829 0.920777 +0.920726 0.920674 0.920622 0.92057 0.920518 0.920466 0.920415 0.920363 +0.920311 0.920259 0.920207 0.920155 0.920103 0.920051 0.919999 0.919947 +0.919895 0.919843 0.919791 0.919739 0.919687 0.919634 0.919582 0.91953 +0.919478 0.919426 0.919374 0.919321 0.919269 0.919217 0.919165 0.919112 +0.91906 0.919008 0.918955 0.918903 0.918851 0.918798 0.918746 0.918694 +0.918641 0.918589 0.918536 0.918484 0.918431 0.918379 0.918326 0.918274 +0.918221 0.918169 0.918116 0.918064 0.918011 0.917958 0.917906 0.917853 +0.9178 0.917748 0.917695 0.917642 0.91759 0.917537 0.917484 0.917431 +0.917379 0.917326 0.917273 0.91722 0.917167 0.917114 0.917062 0.917009 +0.916956 0.916903 0.91685 0.916797 0.916744 0.916691 0.916638 0.916585 +0.916532 0.916479 0.916426 0.916373 0.91632 0.916267 0.916214 0.91616 +0.916107 0.916054 0.916001 0.915948 0.915895 0.915841 0.915788 0.915735 +0.915682 0.915628 0.915575 0.915522 0.915468 0.915415 0.915362 0.915308 +0.915255 0.915201 0.915148 0.915095 0.915041 0.914988 0.914934 0.914881 +0.914827 0.914774 0.91472 0.914666 0.914613 0.914559 0.914506 0.914452 +0.914398 0.914345 0.914291 0.914237 0.914184 0.91413 0.914076 0.914023 +0.913969 0.913915 0.913861 0.913807 0.913754 0.9137 0.913646 0.913592 +0.913538 0.913484 0.91343 0.913376 0.913322 0.913269 0.913215 0.913161 +0.913107 0.913052 0.912998 0.912944 0.91289 0.912836 0.912782 0.912728 +0.912674 0.91262 0.912566 0.912511 0.912457 0.912403 0.912349 0.912295 +0.91224 0.912186 0.912132 0.912078 0.912023 0.911969 0.911915 0.91186 +0.911806 0.911752 0.911697 0.911643 0.911588 0.911534 0.911479 0.911425 +0.91137 0.911316 0.911261 0.911207 0.911152 0.911098 0.911043 0.910989 +0.910934 0.910879 0.910825 0.91077 0.910715 0.910661 0.910606 0.910551 +0.910497 0.910442 0.910387 0.910332 0.910277 0.910223 0.910168 0.910113 +0.910058 0.910003 0.909948 0.909894 0.909839 0.909784 0.909729 0.909674 +0.909619 0.909564 0.909509 0.909454 0.909399 0.909344 0.909289 0.909234 +0.909178 0.909123 0.909068 0.909013 0.908958 0.908903 0.908848 0.908792 +0.908737 0.908682 0.908627 0.908571 0.908516 0.908461 0.908406 0.90835 +0.908295 0.90824 0.908184 0.908129 0.908073 0.908018 0.907963 0.907907 +0.907852 0.907796 0.907741 0.907685 0.90763 0.907574 0.907519 0.907463 +0.907408 0.907352 0.907296 0.907241 0.907185 0.90713 0.907074 0.907018 +0.906962 0.906907 0.906851 0.906795 0.90674 0.906684 0.906628 0.906572 +0.906516 0.906461 0.906405 0.906349 0.906293 0.906237 0.906181 0.906125 +0.906069 0.906013 0.905957 0.905901 0.905845 0.905789 0.905733 0.905677 +0.905621 0.905565 0.905509 0.905453 0.905397 0.905341 0.905285 0.905229 +0.905172 0.905116 0.90506 0.905004 0.904948 0.904891 0.904835 0.904779 +0.904723 0.904666 0.90461 0.904554 0.904497 0.904441 0.904384 0.904328 +0.904272 0.904215 0.904159 0.904102 0.904046 0.903989 0.903933 0.903876 +0.90382 0.903763 0.903707 0.90365 0.903594 0.903537 0.90348 0.903424 +0.903367 0.90331 0.903254 0.903197 0.90314 0.903084 0.903027 0.90297 +0.902913 0.902857 0.9028 0.902743 0.902686 0.902629 0.902573 0.902516 +0.902459 0.902402 0.902345 0.902288 0.902231 0.902174 0.902117 0.90206 +0.902003 0.901946 0.901889 0.901832 0.901775 0.901718 0.901661 0.901604 +0.901547 0.901489 0.901432 0.901375 0.901318 0.901261 0.901204 0.901146 +0.901089 0.901032 0.900975 0.900917 0.90086 0.900803 0.900745 0.900688 +0.900631 0.900573 0.900516 0.900459 0.900401 0.900344 0.900286 0.900229 +0.900171 0.900114 0.900056 0.899999 0.899941 0.899884 0.899826 0.899769 +0.899711 0.899653 0.899596 0.899538 0.899481 0.899423 0.899365 0.899307 +0.89925 0.899192 0.899134 0.899077 0.899019 0.898961 0.898903 0.898845 +0.898788 0.89873 0.898672 0.898614 0.898556 0.898498 0.89844 0.898382 +0.898324 0.898266 0.898209 0.898151 0.898093 0.898035 0.897977 0.897918 +0.89786 0.897802 0.897744 0.897686 0.897628 0.89757 0.897512 0.897454 +0.897395 0.897337 0.897279 0.897221 0.897163 0.897104 0.897046 0.896988 +0.896929 0.896871 0.896813 0.896755 0.896696 0.896638 0.896579 0.896521 +0.896463 0.896404 0.896346 0.896287 0.896229 0.89617 0.896112 0.896053 +0.895995 0.895936 0.895878 0.895819 0.895761 0.895702 0.895643 0.895585 +0.895526 0.895467 0.895409 0.89535 0.895291 0.895233 0.895174 0.895115 +0.895056 0.894998 0.894939 0.89488 0.894821 0.894762 0.894704 0.894645 +0.894586 0.894527 0.894468 0.894409 0.89435 0.894291 0.894232 0.894173 +0.894114 0.894055 0.893996 0.893937 0.893878 0.893819 0.89376 0.893701 +0.893642 0.893583 0.893524 0.893464 0.893405 0.893346 0.893287 0.893228 +0.893168 0.893109 0.89305 0.892991 0.892931 0.892872 0.892813 0.892753 +0.892694 0.892635 0.892575 0.892516 0.892457 0.892397 0.892338 0.892278 +0.892219 0.892159 0.8921 0.89204 0.891981 0.891921 0.891862 0.891802 +0.891743 0.891683 0.891623 0.891564 0.891504 0.891445 0.891385 0.891325 +0.891266 0.891206 0.891146 0.891086 0.891027 0.890967 0.890907 0.890847 +0.890788 0.890728 0.890668 0.890608 0.890548 0.890488 0.890429 0.890369 +0.890309 0.890249 0.890189 0.890129 0.890069 0.890009 0.889949 0.889889 +0.889829 0.889769 0.889709 0.889649 0.889589 0.889529 0.889468 0.889408 +0.889348 0.889288 0.889228 0.889168 0.889107 0.889047 0.888987 0.888927 +0.888866 0.888806 0.888746 0.888686 0.888625 0.888565 0.888505 0.888444 +0.888384 0.888323 0.888263 0.888203 0.888142 0.888082 0.888021 0.887961 +0.8879 0.88784 0.887779 0.887719 0.887658 0.887598 0.887537 0.887477 +0.887416 0.887355 0.887295 0.887234 0.887173 0.887113 0.887052 0.886991 +0.886931 0.88687 0.886809 0.886748 0.886688 0.886627 0.886566 0.886505 +0.886444 0.886384 0.886323 0.886262 0.886201 0.88614 0.886079 0.886018 +0.885957 0.885896 0.885835 0.885774 0.885713 0.885652 0.885591 0.88553 +0.885469 0.885408 0.885347 0.885286 0.885225 0.885164 0.885103 0.885041 +0.88498 0.884919 0.884858 0.884797 0.884735 0.884674 0.884613; +#A 20000 0.884552 0.88449 0.884429 0.884368 0.884306 0.884245 0.884184 +0.884122 0.884061 0.884 0.883938 0.883877 0.883815 0.883754 0.883692 +0.883631 0.883569 0.883508 0.883446 0.883385 0.883323 0.883262 0.8832 +0.883139 0.883077 0.883015 0.882954 0.882892 0.88283 0.882769 0.882707 +0.882645 0.882584 0.882522 0.88246 0.882398 0.882337 0.882275 0.882213 +0.882151 0.882089 0.882028 0.881966 0.881904 0.881842 0.88178 0.881718 +0.881656 0.881594 0.881532 0.88147 0.881408 0.881346 0.881284 0.881222 +0.88116 0.881098 0.881036 0.880974 0.880912 0.88085 0.880788 0.880726 +0.880663 0.880601 0.880539 0.880477 0.880415 0.880352 0.88029 0.880228 +0.880166 0.880103 0.880041 0.879979 0.879916 0.879854 0.879792 0.879729 +0.879667 0.879605 0.879542 0.87948 0.879417 0.879355 0.879292 0.87923 +0.879167 0.879105 0.879042 0.87898 0.878917 0.878855 0.878792 0.87873 +0.878667 0.878604 0.878542 0.878479 0.878416 0.878354 0.878291 0.878228 +0.878166 0.878103 0.87804 0.877977 0.877915 0.877852 0.877789 0.877726 +0.877664 0.877601 0.877538 0.877475 0.877412 0.877349 0.877286 0.877223 +0.87716 0.877097 0.877035 0.876972 0.876909 0.876846 0.876783 0.87672 +0.876656 0.876593 0.87653 0.876467 0.876404 0.876341 0.876278 0.876215 +0.876152 0.876088 0.876025 0.875962 0.875899 0.875836 0.875772 0.875709 +0.875646 0.875583 0.875519 0.875456 0.875393 0.875329 0.875266 0.875203 +0.875139 0.875076 0.875012 0.874949 0.874886 0.874822 0.874759 0.874695 +0.874632 0.874568 0.874505 0.874441 0.874378 0.874314 0.87425 0.874187 +0.874123 0.87406 0.873996 0.873932 0.873869 0.873805 0.873741 0.873678 +0.873614 0.87355 0.873487 0.873423 0.873359 0.873295 0.873231 0.873168 +0.873104 0.87304 0.872976 0.872912 0.872848 0.872785 0.872721 0.872657 +0.872593 0.872529 0.872465 0.872401 0.872337 0.872273 0.872209 0.872145 +0.872081 0.872017 0.871953 0.871889 0.871825 0.871761 0.871696 0.871632 +0.871568 0.871504 0.87144 0.871376 0.871311 0.871247 0.871183 0.871119 +0.871054 0.87099 0.870926 0.870862 0.870797 0.870733 0.870669 0.870604 +0.87054 0.870476 0.870411 0.870347 0.870282 0.870218 0.870153 0.870089 +0.870025 0.86996 0.869896 0.869831 0.869767 0.869702 0.869637 0.869573 +0.869508 0.869444 0.869379 0.869314 0.86925 0.869185 0.86912 0.869056 +0.868991 0.868926 0.868862 0.868797 0.868732 0.868667 0.868603 0.868538 +0.868473 0.868408 0.868343 0.868279 0.868214 0.868149 0.868084 0.868019 +0.867954 0.867889 0.867824 0.867759 0.867694 0.867629 0.867564 0.867499 +0.867434 0.867369 0.867304 0.867239 0.867174 0.867109 0.867044 0.866979 +0.866914 0.866849 0.866784 0.866718 0.866653 0.866588 0.866523 0.866458 +0.866392 0.866327 0.866262 0.866197 0.866131 0.866066 0.866001 0.865935 +0.86587 0.865805 0.865739 0.865674 0.865609 0.865543 0.865478 0.865412 +0.865347 0.865281 0.865216 0.86515 0.865085 0.865019 0.864954 0.864888 +0.864823 0.864757 0.864692 0.864626 0.86456 0.864495 0.864429 0.864364 +0.864298 0.864232 0.864166 0.864101 0.864035 0.863969 0.863904 0.863838 +0.863772 0.863706 0.863641 0.863575 0.863509 0.863443 0.863377 0.863311 +0.863245 0.86318 0.863114 0.863048 0.862982 0.862916 0.86285 0.862784 +0.862718 0.862652 0.862586 0.86252 0.862454 0.862388 0.862322 0.862256 +0.86219 0.862124 0.862057 0.861991 0.861925 0.861859 0.861793 0.861727 +0.86166 0.861594 0.861528 0.861462 0.861396 0.861329 0.861263 0.861197 +0.86113 0.861064 0.860998 0.860931 0.860865 0.860799 0.860732 0.860666 +0.8606 0.860533 0.860467 0.8604 0.860334 0.860267 0.860201 0.860134 +0.860068 0.860001 0.859935 0.859868 0.859802 0.859735 0.859668 0.859602 +0.859535 0.859469 0.859402 0.859335 0.859269 0.859202 0.859135 0.859069 +0.859002 0.858935 0.858868 0.858801 0.858735 0.858668 0.858601 0.858534 +0.858467 0.858401 0.858334 0.858267 0.8582 0.858133 0.858066 0.857999 +0.857932 0.857865 0.857798 0.857731 0.857664 0.857597 0.85753 0.857463 +0.857396 0.857329 0.857262 0.857195 0.857128 0.857061 0.856994 0.856927 +0.85686 0.856792 0.856725 0.856658 0.856591 0.856524 0.856456 0.856389 +0.856322 0.856255 0.856187 0.85612 0.856053 0.855986 0.855918 0.855851 +0.855783 0.855716 0.855649 0.855581 0.855514 0.855447 0.855379 0.855312 +0.855244 0.855177 0.855109 0.855042 0.854974 0.854907 0.854839 0.854772 +0.854704 0.854636 0.854569 0.854501 0.854434 0.854366 0.854298 0.854231 +0.854163 0.854095 0.854028 0.85396 0.853892 0.853824 0.853757 0.853689 +0.853621 0.853553 0.853486 0.853418 0.85335 0.853282 0.853214 0.853146 +0.853079 0.853011 0.852943 0.852875 0.852807 0.852739 0.852671 0.852603 +0.852535 0.852467 0.852399 0.852331 0.852263 0.852195 0.852127 0.852059 +0.851991 0.851923 0.851855 0.851786 0.851718 0.85165 0.851582 0.851514 +0.851446 0.851377 0.851309 0.851241 0.851173 0.851104 0.851036 0.850968 +0.8509 0.850831 0.850763 0.850695 0.850626 0.850558 0.85049 0.850421 +0.850353 0.850284 0.850216 0.850148 0.850079 0.850011 0.849942 0.849874 +0.849805 0.849737 0.849668 0.8496 0.849531 0.849463 0.849394 0.849325 +0.849257 0.849188 0.849119 0.849051 0.848982 0.848914 0.848845 0.848776 +0.848707 0.848639 0.84857 0.848501 0.848433 0.848364 0.848295 0.848226 +0.848157 0.848089 0.84802 0.847951 0.847882 0.847813 0.847744 0.847675 +0.847606 0.847538 0.847469 0.8474 0.847331 0.847262 0.847193 0.847124 +0.847055 0.846986 0.846917 0.846848 0.846779 0.846709 0.84664 0.846571 +0.846502 0.846433 0.846364 0.846295 0.846226 0.846156 0.846087 0.846018 +0.845949 0.84588 0.84581 0.845741 0.845672 0.845603 0.845533 0.845464 +0.845395 0.845325 0.845256 0.845187 0.845117 0.845048 0.844979 0.844909 +0.84484 0.84477 0.844701 0.844631 0.844562 0.844492 0.844423 0.844353 +0.844284 0.844214 0.844145 0.844075 0.844006 0.843936 0.843867 0.843797 +0.843727 0.843658 0.843588 0.843518 0.843449 0.843379 0.843309 0.84324 +0.84317 0.8431 0.84303 0.842961 0.842891 0.842821 0.842751 0.842681 +0.842612 0.842542 0.842472 0.842402 0.842332 0.842262 0.842192 0.842123 +0.842053 0.841983 0.841913 0.841843 0.841773 0.841703 0.841633 0.841563 +0.841493 0.841423 0.841353 0.841283 0.841213 0.841143 0.841072 0.841002 +0.840932 0.840862 0.840792 0.840722 0.840652 0.840581 0.840511 0.840441 +0.840371 0.840301 0.84023 0.84016 0.84009 0.840019 0.839949 0.839879 +0.839809 0.839738 0.839668 0.839597 0.839527 0.839457 0.839386 0.839316 +0.839245 0.839175 0.839105 0.839034 0.838964 0.838893 0.838823 0.838752 +0.838682 0.838611 0.838541 0.83847 0.838399 0.838329 0.838258 0.838188 +0.838117 0.838046 0.837976 0.837905 0.837834 0.837764 0.837693 0.837622 +0.837552 0.837481 0.83741 0.837339 0.837269 0.837198 0.837127 0.837056 +0.836985 0.836914 0.836844 0.836773 0.836702 0.836631 0.83656 0.836489 +0.836418 0.836347 0.836276 0.836205 0.836134 0.836064 0.835993 0.835922 +0.835851 0.835779 0.835708 0.835637 0.835566 0.835495 0.835424 0.835353 +0.835282 0.835211 0.83514 0.835068 0.834997 0.834926 0.834855 0.834784 +0.834713 0.834641 0.83457 0.834499 0.834428 0.834356 0.834285 0.834214 +0.834142 0.834071 0.834 0.833928 0.833857 0.833786 0.833714 0.833643 +0.833571 0.8335 0.833429 0.833357 0.833286 0.833214 0.833143 0.833071 +0.833 0.832928 0.832857 0.832785 0.832713 0.832642 0.83257 0.832499 +0.832427 0.832355 0.832284 0.832212 0.832141 0.832069 0.831997 0.831926 +0.831854 0.831782 0.83171 0.831639 0.831567 0.831495 0.831423 0.831352 +0.83128 0.831208 0.831136 0.831064 0.830992 0.830921 0.830849 0.830777 +0.830705 0.830633 0.830561 0.830489 0.830417 0.830345 0.830273 0.830201 +0.830129 0.830057 0.829985 0.829913 0.829841 0.829769 0.829697 0.829625 +0.829553 0.829481 0.829409 0.829336 0.829264 0.829192 0.82912 0.829048 +0.828976 0.828903 0.828831 0.828759 0.828687 0.828614 0.828542 0.82847 +0.828398 0.828325 0.828253 0.828181 0.828108 0.828036 0.827964 0.827891 +0.827819 0.827746 0.827674 0.827602 0.827529 0.827457 0.827384 0.827312 +0.827239 0.827167 0.827094 0.827022 0.826949 0.826877 0.826804 0.826732 +0.826659 0.826586 0.826514 0.826441 0.826369 0.826296 0.826223 0.826151 +0.826078 0.826005 0.825933 0.82586 0.825787 0.825714 0.825642 0.825569 +0.825496 0.825423 0.825351 0.825278 0.825205 0.825132 0.825059 0.824986 +0.824914 0.824841 0.824768 0.824695 0.824622 0.824549 0.824476 0.824403 +0.82433 0.824257 0.824184 0.824111 0.824038 0.823965 0.823892 0.823819 +0.823746 0.823673 0.8236 0.823527 0.823454 0.823381 0.823307 0.823234 +0.823161 0.823088 0.823015 0.822942 0.822868 0.822795 0.822722 0.822649 +0.822576 0.822502 0.822429 0.822356 0.822282 0.822209 0.822136 0.822062 +0.821989 0.821916 0.821842 0.821769 0.821696 0.821622 0.821549 0.821475 +0.821402 0.821329 0.821255 0.821182 0.821108 0.821035 0.820961 0.820888 +0.820814 0.820741 0.820667 0.820593 0.82052 0.820446 0.820373 0.820299 +0.820225 0.820152 0.820078 0.820004 0.819931 0.819857 0.819783 0.81971 +0.819636 0.819562 0.819488 0.819415 0.819341 0.819267 0.819193 0.81912 +0.819046 0.818972 0.818898 0.818824 0.81875 0.818677 0.818603 0.818529 +0.818455 0.818381 0.818307 0.818233 0.818159 0.818085 0.818011 0.817937 +0.817863 0.817789 0.817715 0.817641 0.817567 0.817493 0.817419 0.817345 +0.817271 0.817197 0.817123 0.817048 0.816974 0.8169 0.816826 0.816752 +0.816678; +#A 21000 0.816603 0.816529 0.816455 0.816381 0.816306 0.816232 0.816158 +0.816084 0.816009 0.815935 0.815861 0.815786 0.815712 0.815638 0.815563 +0.815489 0.815415 0.81534 0.815266 0.815191 0.815117 0.815042 0.814968 +0.814894 0.814819 0.814745 0.81467 0.814596 0.814521 0.814447 0.814372 +0.814297 0.814223 0.814148 0.814074 0.813999 0.813924 0.81385 0.813775 +0.813701 0.813626 0.813551 0.813477 0.813402 0.813327 0.813252 0.813178 +0.813103 0.813028 0.812953 0.812879 0.812804 0.812729 0.812654 0.812579 +0.812505 0.81243 0.812355 0.81228 0.812205 0.81213 0.812055 0.81198 +0.811906 0.811831 0.811756 0.811681 0.811606 0.811531 0.811456 0.811381 +0.811306 0.811231 0.811156 0.811081 0.811005 0.81093 0.810855 0.81078 +0.810705 0.81063 0.810555 0.81048 0.810405 0.810329 0.810254 0.810179 +0.810104 0.810029 0.809953 0.809878 0.809803 0.809728 0.809652 0.809577 +0.809502 0.809426 0.809351 0.809276 0.809201 0.809125 0.80905 0.808974 +0.808899 0.808824 0.808748 0.808673 0.808597 0.808522 0.808447 0.808371 +0.808296 0.80822 0.808145 0.808069 0.807994 0.807918 0.807842 0.807767 +0.807691 0.807616 0.80754 0.807465 0.807389 0.807313 0.807238 0.807162 +0.807086 0.807011 0.806935 0.806859 0.806784 0.806708 0.806632 0.806557 +0.806481 0.806405 0.806329 0.806253 0.806178 0.806102 0.806026 0.80595 +0.805874 0.805799 0.805723 0.805647 0.805571 0.805495 0.805419 0.805343 +0.805267 0.805191 0.805115 0.80504 0.804964 0.804888 0.804812 0.804736 +0.80466 0.804583 0.804507 0.804431 0.804355 0.804279 0.804203 0.804127 +0.804051 0.803975 0.803899 0.803823 0.803746 0.80367 0.803594 0.803518 +0.803442 0.803366 0.803289 0.803213 0.803137 0.803061 0.802984 0.802908 +0.802832 0.802756 0.802679 0.802603 0.802527 0.80245 0.802374 0.802298 +0.802221 0.802145 0.802068 0.801992 0.801916 0.801839 0.801763 0.801686 +0.80161 0.801533 0.801457 0.80138 0.801304 0.801227 0.801151 0.801074 +0.800998 0.800921 0.800845 0.800768 0.800691 0.800615 0.800538 0.800462 +0.800385 0.800308 0.800232 0.800155 0.800078 0.800002 0.799925 0.799848 +0.799771 0.799695 0.799618 0.799541 0.799464 0.799388 0.799311 0.799234 +0.799157 0.79908 0.799004 0.798927 0.79885 0.798773 0.798696 0.798619 +0.798542 0.798465 0.798388 0.798311 0.798235 0.798158 0.798081 0.798004 +0.797927 0.79785 0.797773 0.797696 0.797619 0.797542 0.797464 0.797387 +0.79731 0.797233 0.797156 0.797079 0.797002 0.796925 0.796848 0.796771 +0.796693 0.796616 0.796539 0.796462 0.796385 0.796307 0.79623 0.796153 +0.796076 0.795998 0.795921 0.795844 0.795766 0.795689 0.795612 0.795535 +0.795457 0.79538 0.795303 0.795225 0.795148 0.79507 0.794993 0.794915 +0.794838 0.794761 0.794683 0.794606 0.794528 0.794451 0.794373 0.794296 +0.794218 0.794141 0.794063 0.793986 0.793908 0.793831 0.793753 0.793675 +0.793598 0.79352 0.793443 0.793365 0.793287 0.79321 0.793132 0.793054 +0.792977 0.792899 0.792821 0.792744 0.792666 0.792588 0.79251 0.792433 +0.792355 0.792277 0.792199 0.792121 0.792044 0.791966 0.791888 0.79181 +0.791732 0.791654 0.791576 0.791499 0.791421 0.791343 0.791265 0.791187 +0.791109 0.791031 0.790953 0.790875 0.790797 0.790719 0.790641 0.790563 +0.790485 0.790407 0.790329 0.790251 0.790173 0.790095 0.790017 0.789939 +0.78986 0.789782 0.789704 0.789626 0.789548 0.78947 0.789392 0.789313 +0.789235 0.789157 0.789079 0.789 0.788922 0.788844 0.788766 0.788687 +0.788609 0.788531 0.788453 0.788374 0.788296 0.788218 0.788139 0.788061 +0.787982 0.787904 0.787826 0.787747 0.787669 0.78759 0.787512 0.787434 +0.787355 0.787277 0.787198 0.78712 0.787041 0.786963 0.786884 0.786806 +0.786727 0.786649 0.78657 0.786491 0.786413 0.786334 0.786256 0.786177 +0.786098 0.78602 0.785941 0.785863 0.785784 0.785705 0.785626 0.785548 +0.785469 0.78539 0.785312 0.785233 0.785154 0.785075 0.784997 0.784918 +0.784839 0.78476 0.784681 0.784603 0.784524 0.784445 0.784366 0.784287 +0.784208 0.78413 0.784051 0.783972 0.783893 0.783814 0.783735 0.783656 +0.783577 0.783498 0.783419 0.78334 0.783261 0.783182 0.783103 0.783024 +0.782945 0.782866 0.782787 0.782708 0.782629 0.78255 0.78247 0.782391 +0.782312 0.782233 0.782154 0.782075 0.781996 0.781916 0.781837 0.781758 +0.781679 0.7816 0.78152 0.781441 0.781362 0.781283 0.781203 0.781124 +0.781045 0.780966 0.780886 0.780807 0.780728 0.780648 0.780569 0.78049 +0.78041 0.780331 0.780251 0.780172 0.780093 0.780013 0.779934 0.779854 +0.779775 0.779695 0.779616 0.779536 0.779457 0.779377 0.779298 0.779218 +0.779139 0.779059 0.77898 0.7789 0.778821 0.778741 0.778661 0.778582 +0.778502 0.778423 0.778343 0.778263 0.778184 0.778104 0.778024 0.777945 +0.777865 0.777785 0.777705 0.777626 0.777546 0.777466 0.777386 0.777307 +0.777227 0.777147 0.777067 0.776987 0.776908 0.776828 0.776748 0.776668 +0.776588 0.776508 0.776428 0.776349 0.776269 0.776189 0.776109 0.776029 +0.775949 0.775869 0.775789 0.775709 0.775629 0.775549 0.775469 0.775389 +0.775309 0.775229 0.775149 0.775069 0.774989 0.774909 0.774829 0.774749 +0.774668 0.774588 0.774508 0.774428 0.774348 0.774268 0.774188 0.774107 +0.774027 0.773947 0.773867 0.773787 0.773706 0.773626 0.773546 0.773466 +0.773385 0.773305 0.773225 0.773144 0.773064 0.772984 0.772904 0.772823 +0.772743 0.772663 0.772582 0.772502 0.772421 0.772341 0.772261 0.77218 +0.7721 0.772019 0.771939 0.771858 0.771778 0.771697 0.771617 0.771536 +0.771456 0.771375 0.771295 0.771214 0.771134 0.771053 0.770973 0.770892 +0.770811 0.770731 0.77065 0.77057 0.770489 0.770408 0.770328 0.770247 +0.770166 0.770086 0.770005 0.769924 0.769844 0.769763 0.769682 0.769601 +0.769521 0.76944 0.769359 0.769278 0.769198 0.769117 0.769036 0.768955 +0.768874 0.768794 0.768713 0.768632 0.768551 0.76847 0.768389 0.768308 +0.768227 0.768147 0.768066 0.767985 0.767904 0.767823 0.767742 0.767661 +0.76758 0.767499 0.767418 0.767337 0.767256 0.767175 0.767094 0.767013 +0.766932 0.76685 0.766769 0.766688 0.766607 0.766526 0.766445 0.766364 +0.766283 0.766202 0.76612 0.766039 0.765958 0.765877 0.765796 0.765714 +0.765633 0.765552 0.765471 0.76539 0.765308 0.765227 0.765146 0.765064 +0.764983 0.764902 0.764821 0.764739 0.764658 0.764576 0.764495 0.764414 +0.764332 0.764251 0.76417 0.764088 0.764007 0.763925 0.763844 0.763762 +0.763681 0.7636 0.763518 0.763437 0.763355 0.763274 0.763192 0.763111 +0.763029 0.762947 0.762866 0.762784 0.762703 0.762621 0.76254 0.762458 +0.762376 0.762295 0.762213 0.762132 0.76205 0.761968 0.761887 0.761805 +0.761723 0.761642 0.76156 0.761478 0.761396 0.761315 0.761233 0.761151 +0.761069 0.760988 0.760906 0.760824 0.760742 0.76066 0.760579 0.760497 +0.760415 0.760333 0.760251 0.760169 0.760088 0.760006 0.759924 0.759842 +0.75976 0.759678 0.759596 0.759514 0.759432 0.75935 0.759268 0.759186 +0.759104 0.759022 0.75894 0.758858 0.758776 0.758694 0.758612 0.75853 +0.758448 0.758366 0.758284 0.758202 0.75812 0.758038 0.757955 0.757873 +0.757791 0.757709 0.757627 0.757545 0.757462 0.75738 0.757298 0.757216 +0.757134 0.757051 0.756969 0.756887 0.756805 0.756722 0.75664 0.756558 +0.756476 0.756393 0.756311 0.756229 0.756146 0.756064 0.755982 0.755899 +0.755817 0.755734 0.755652 0.75557 0.755487 0.755405 0.755322 0.75524 +0.755158 0.755075 0.754993 0.75491 0.754828 0.754745 0.754663 0.75458 +0.754498 0.754415 0.754333 0.75425 0.754167 0.754085 0.754002 0.75392 +0.753837 0.753754 0.753672 0.753589 0.753507 0.753424 0.753341 0.753259 +0.753176 0.753093 0.753011 0.752928 0.752845 0.752762 0.75268 0.752597 +0.752514 0.752432 0.752349 0.752266 0.752183 0.7521 0.752018 0.751935 +0.751852 0.751769 0.751686 0.751603 0.751521 0.751438 0.751355 0.751272 +0.751189 0.751106 0.751023 0.75094 0.750857 0.750775 0.750692 0.750609 +0.750526 0.750443 0.75036 0.750277 0.750194 0.750111 0.750028 0.749945 +0.749862 0.749779 0.749695 0.749612 0.749529 0.749446 0.749363 0.74928 +0.749197 0.749114 0.749031 0.748948 0.748864 0.748781 0.748698 0.748615 +0.748532 0.748449 0.748365 0.748282 0.748199 0.748116 0.748032 0.747949 +0.747866 0.747783 0.747699 0.747616 0.747533 0.747449 0.747366 0.747283 +0.747199 0.747116 0.747033 0.746949 0.746866 0.746783 0.746699 0.746616 +0.746532 0.746449 0.746366 0.746282 0.746199 0.746115 0.746032 0.745948 +0.745865 0.745781 0.745698 0.745614 0.745531 0.745447 0.745364 0.74528 +0.745197 0.745113 0.74503 0.744946 0.744862 0.744779 0.744695 0.744612 +0.744528 0.744444 0.744361 0.744277 0.744193 0.74411 0.744026 0.743942 +0.743859 0.743775 0.743691 0.743608 0.743524 0.74344 0.743356 0.743273 +0.743189 0.743105 0.743021 0.742938 0.742854 0.74277 0.742686 0.742602 +0.742518 0.742435 0.742351 0.742267 0.742183 0.742099 0.742015 0.741931 +0.741847 0.741764 0.74168 0.741596 0.741512 0.741428 0.741344 0.74126 +0.741176 0.741092 0.741008 0.740924 0.74084 0.740756 0.740672 0.740588 +0.740504 0.74042 0.740336 0.740252 0.740167 0.740083 0.739999 0.739915 +0.739831 0.739747 0.739663 0.739579 0.739494 0.73941 0.739326 0.739242 +0.739158 0.739074 0.738989 0.738905 0.738821 0.738737 0.738652 0.738568 +0.738484 0.7384 0.738315 0.738231 0.738147 0.738062 0.737978 0.737894 +0.737809 0.737725 0.737641 0.737556 0.737472 0.737388 0.737303 0.737219 +0.737135; +#A 22000 0.73705 0.736966 0.736881 0.736797 0.736712 0.736628 0.736543 +0.736459 0.736374 0.73629 0.736206 0.736121 0.736037 0.735952 0.735867 +0.735783 0.735698 0.735614 0.735529 0.735445 0.73536 0.735276 0.735191 +0.735106 0.735022 0.734937 0.734852 0.734768 0.734683 0.734598 0.734514 +0.734429 0.734344 0.73426 0.734175 0.73409 0.734006 0.733921 0.733836 +0.733751 0.733667 0.733582 0.733497 0.733412 0.733328 0.733243 0.733158 +0.733073 0.732988 0.732903 0.732819 0.732734 0.732649 0.732564 0.732479 +0.732394 0.732309 0.732224 0.73214 0.732055 0.73197 0.731885 0.7318 +0.731715 0.73163 0.731545 0.73146 0.731375 0.73129 0.731205 0.73112 +0.731035 0.73095 0.730865 0.73078 0.730695 0.73061 0.730525 0.73044 +0.730354 0.730269 0.730184 0.730099 0.730014 0.729929 0.729844 0.729759 +0.729673 0.729588 0.729503 0.729418 0.729333 0.729248 0.729162 0.729077 +0.728992 0.728907 0.728821 0.728736 0.728651 0.728566 0.72848 0.728395 +0.72831 0.728225 0.728139 0.728054 0.727969 0.727883 0.727798 0.727713 +0.727627 0.727542 0.727456 0.727371 0.727286 0.7272 0.727115 0.727029 +0.726944 0.726859 0.726773 0.726688 0.726602 0.726517 0.726431 0.726346 +0.72626 0.726175 0.726089 0.726004 0.725918 0.725833 0.725747 0.725662 +0.725576 0.725491 0.725405 0.725319 0.725234 0.725148 0.725063 0.724977 +0.724891 0.724806 0.72472 0.724634 0.724549 0.724463 0.724377 0.724292 +0.724206 0.72412 0.724035 0.723949 0.723863 0.723777 0.723692 0.723606 +0.72352 0.723434 0.723349 0.723263 0.723177 0.723091 0.723005 0.72292 +0.722834 0.722748 0.722662 0.722576 0.72249 0.722405 0.722319 0.722233 +0.722147 0.722061 0.721975 0.721889 0.721803 0.721717 0.721631 0.721546 +0.72146 0.721374 0.721288 0.721202 0.721116 0.72103 0.720944 0.720858 +0.720772 0.720686 0.7206 0.720514 0.720428 0.720341 0.720255 0.720169 +0.720083 0.719997 0.719911 0.719825 0.719739 0.719653 0.719567 0.71948 +0.719394 0.719308 0.719222 0.719136 0.71905 0.718963 0.718877 0.718791 +0.718705 0.718619 0.718532 0.718446 0.71836 0.718274 0.718187 0.718101 +0.718015 0.717929 0.717842 0.717756 0.71767 0.717583 0.717497 0.717411 +0.717324 0.717238 0.717152 0.717065 0.716979 0.716892 0.716806 0.71672 +0.716633 0.716547 0.71646 0.716374 0.716288 0.716201 0.716115 0.716028 +0.715942 0.715855 0.715769 0.715682 0.715596 0.715509 0.715423 0.715336 +0.71525 0.715163 0.715077 0.71499 0.714904 0.714817 0.71473 0.714644 +0.714557 0.714471 0.714384 0.714297 0.714211 0.714124 0.714038 0.713951 +0.713864 0.713778 0.713691 0.713604 0.713517 0.713431 0.713344 0.713257 +0.713171 0.713084 0.712997 0.71291 0.712824 0.712737 0.71265 0.712563 +0.712477 0.71239 0.712303 0.712216 0.712129 0.712043 0.711956 0.711869 +0.711782 0.711695 0.711608 0.711522 0.711435 0.711348 0.711261 0.711174 +0.711087 0.711 0.710913 0.710826 0.710739 0.710652 0.710565 0.710478 +0.710392 0.710305 0.710218 0.710131 0.710044 0.709957 0.70987 0.709783 +0.709695 0.709608 0.709521 0.709434 0.709347 0.70926 0.709173 0.709086 +0.708999 0.708912 0.708825 0.708738 0.708651 0.708563 0.708476 0.708389 +0.708302 0.708215 0.708128 0.70804 0.707953 0.707866 0.707779 0.707692 +0.707604 0.707517 0.70743 0.707343 0.707255 0.707168 0.707081 0.706994 +0.706906 0.706819 0.706732 0.706645 0.706557 0.70647 0.706383 0.706295 +0.706208 0.706121 0.706033 0.705946 0.705859 0.705771 0.705684 0.705596 +0.705509 0.705422 0.705334 0.705247 0.705159 0.705072 0.704984 0.704897 +0.70481 0.704722 0.704635 0.704547 0.70446 0.704372 0.704285 0.704197 +0.70411 0.704022 0.703935 0.703847 0.703759 0.703672 0.703584 0.703497 +0.703409 0.703322 0.703234 0.703146 0.703059 0.702971 0.702884 0.702796 +0.702708 0.702621 0.702533 0.702445 0.702358 0.70227 0.702182 0.702095 +0.702007 0.701919 0.701832 0.701744 0.701656 0.701568 0.701481 0.701393 +0.701305 0.701217 0.70113 0.701042 0.700954 0.700866 0.700778 0.700691 +0.700603 0.700515 0.700427 0.700339 0.700251 0.700164 0.700076 0.699988 +0.6999 0.699812 0.699724 0.699636 0.699548 0.699461 0.699373 0.699285 +0.699197 0.699109 0.699021 0.698933 0.698845 0.698757 0.698669 0.698581 +0.698493 0.698405 0.698317 0.698229 0.698141 0.698053 0.697965 0.697877 +0.697789 0.697701 0.697613 0.697525 0.697437 0.697348 0.69726 0.697172 +0.697084 0.696996 0.696908 0.69682 0.696732 0.696643 0.696555 0.696467 +0.696379 0.696291 0.696203 0.696114 0.696026 0.695938 0.69585 0.695762 +0.695673 0.695585 0.695497 0.695409 0.69532 0.695232 0.695144 0.695056 +0.694967 0.694879 0.694791 0.694703 0.694614 0.694526 0.694438 0.694349 +0.694261 0.694173 0.694084 0.693996 0.693907 0.693819 0.693731 0.693642 +0.693554 0.693466 0.693377 0.693289 0.6932 0.693112 0.693023 0.692935 +0.692846 0.692758 0.69267 0.692581 0.692493 0.692404 0.692316 0.692227 +0.692139 0.69205 0.691962 0.691873 0.691785 0.691696 0.691607 0.691519 +0.69143 0.691342 0.691253 0.691165 0.691076 0.690987 0.690899 0.69081 +0.690722 0.690633 0.690544 0.690456 0.690367 0.690278 0.69019 0.690101 +0.690012 0.689924 0.689835 0.689746 0.689658 0.689569 0.68948 0.689391 +0.689303 0.689214 0.689125 0.689036 0.688948 0.688859 0.68877 0.688681 +0.688592 0.688504 0.688415 0.688326 0.688237 0.688148 0.68806 0.687971 +0.687882 0.687793 0.687704 0.687615 0.687527 0.687438 0.687349 0.68726 +0.687171 0.687082 0.686993 0.686904 0.686815 0.686726 0.686637 0.686548 +0.686459 0.686371 0.686282 0.686193 0.686104 0.686015 0.685926 0.685837 +0.685748 0.685659 0.68557 0.685481 0.685391 0.685302 0.685213 0.685124 +0.685035 0.684946 0.684857 0.684768 0.684679 0.68459 0.684501 0.684412 +0.684323 0.684233 0.684144 0.684055 0.683966 0.683877 0.683788 0.683699 +0.683609 0.68352 0.683431 0.683342 0.683253 0.683163 0.683074 0.682985 +0.682896 0.682806 0.682717 0.682628 0.682539 0.68245 0.68236 0.682271 +0.682182 0.682092 0.682003 0.681914 0.681825 0.681735 0.681646 0.681557 +0.681467 0.681378 0.681289 0.681199 0.68111 0.68102 0.680931 0.680842 +0.680752 0.680663 0.680574 0.680484 0.680395 0.680305 0.680216 0.680126 +0.680037 0.679947 0.679858 0.679769 0.679679 0.67959 0.6795 0.679411 +0.679321 0.679232 0.679142 0.679053 0.678963 0.678874 0.678784 0.678695 +0.678605 0.678515 0.678426 0.678336 0.678247 0.678157 0.678068 0.677978 +0.677888 0.677799 0.677709 0.67762 0.67753 0.67744 0.677351 0.677261 +0.677171 0.677082 0.676992 0.676902 0.676813 0.676723 0.676633 0.676544 +0.676454 0.676364 0.676275 0.676185 0.676095 0.676005 0.675916 0.675826 +0.675736 0.675646 0.675557 0.675467 0.675377 0.675287 0.675197 0.675108 +0.675018 0.674928 0.674838 0.674748 0.674659 0.674569 0.674479 0.674389 +0.674299 0.674209 0.674119 0.67403 0.67394 0.67385 0.67376 0.67367 +0.67358 0.67349 0.6734 0.67331 0.67322 0.673131 0.673041 0.672951 0.672861 +0.672771 0.672681 0.672591 0.672501 0.672411 0.672321 0.672231 0.672141 +0.672051 0.671961 0.671871 0.671781 0.671691 0.671601 0.67151 0.67142 +0.67133 0.67124 0.67115 0.67106 0.67097 0.67088 0.67079 0.6707 0.67061 +0.670519 0.670429 0.670339 0.670249 0.670159 0.670069 0.669979 0.669888 +0.669798 0.669708 0.669618 0.669528 0.669438 0.669347 0.669257 0.669167 +0.669077 0.668986 0.668896 0.668806 0.668716 0.668625 0.668535 0.668445 +0.668355 0.668264 0.668174 0.668084 0.667993 0.667903 0.667813 0.667723 +0.667632 0.667542 0.667452 0.667361 0.667271 0.667181 0.66709 0.667 +0.666909 0.666819 0.666729 0.666638 0.666548 0.666458 0.666367 0.666277 +0.666186 0.666096 0.666005 0.665915 0.665825 0.665734 0.665644 0.665553 +0.665463 0.665372 0.665282 0.665191 0.665101 0.66501 0.66492 0.664829 +0.664739 0.664648 0.664558 0.664467 0.664377 0.664286 0.664195 0.664105 +0.664014 0.663924 0.663833 0.663743 0.663652 0.663561 0.663471 0.66338 +0.66329 0.663199 0.663108 0.663018 0.662927 0.662836 0.662746 0.662655 +0.662564 0.662474 0.662383 0.662292 0.662202 0.662111 0.66202 0.66193 +0.661839 0.661748 0.661658 0.661567 0.661476 0.661385 0.661295 0.661204 +0.661113 0.661022 0.660932 0.660841 0.66075 0.660659 0.660568 0.660478 +0.660387 0.660296 0.660205 0.660114 0.660024 0.659933 0.659842 0.659751 +0.65966 0.659569 0.659478 0.659388 0.659297 0.659206 0.659115 0.659024 +0.658933 0.658842 0.658751 0.65866 0.65857 0.658479 0.658388 0.658297 +0.658206 0.658115 0.658024 0.657933 0.657842 0.657751 0.65766 0.657569 +0.657478 0.657387 0.657296 0.657205 0.657114 0.657023 0.656932 0.656841 +0.65675 0.656659 0.656568 0.656477 0.656386 0.656295 0.656204 0.656112 +0.656021 0.65593 0.655839 0.655748 0.655657 0.655566 0.655475 0.655384 +0.655292 0.655201 0.65511 0.655019 0.654928 0.654837 0.654746 0.654654 +0.654563 0.654472 0.654381 0.65429 0.654198 0.654107 0.654016 0.653925 +0.653834 0.653742 0.653651 0.65356 0.653469 0.653377 0.653286 0.653195 +0.653104 0.653012 0.652921 0.65283 0.652739 0.652647 0.652556 0.652465 +0.652373 0.652282 0.652191 0.652099 0.652008 0.651917 0.651825 0.651734 +0.651643 0.651551 0.65146 0.651368 0.651277 0.651186 0.651094 0.651003 +0.650912 0.65082 0.650729 0.650637 0.650546 0.650455 0.650363 0.650272 +0.65018 0.650089 0.649997 0.649906 0.649814 0.649723 0.649631 0.64954 +0.649448 0.649357 0.649265 0.649174 0.649082 0.648991 0.648899; +#A 23000 0.648808 0.648716 0.648625 0.648533 0.648442 0.64835 0.648259 +0.648167 0.648075 0.647984 0.647892 0.647801 0.647709 0.647618 0.647526 +0.647434 0.647343 0.647251 0.647159 0.647068 0.646976 0.646885 0.646793 +0.646701 0.64661 0.646518 0.646426 0.646335 0.646243 0.646151 0.64606 +0.645968 0.645876 0.645784 0.645693 0.645601 0.645509 0.645418 0.645326 +0.645234 0.645142 0.645051 0.644959 0.644867 0.644775 0.644684 0.644592 +0.6445 0.644408 0.644316 0.644225 0.644133 0.644041 0.643949 0.643857 +0.643766 0.643674 0.643582 0.64349 0.643398 0.643306 0.643215 0.643123 +0.643031 0.642939 0.642847 0.642755 0.642663 0.642571 0.642479 0.642388 +0.642296 0.642204 0.642112 0.64202 0.641928 0.641836 0.641744 0.641652 +0.64156 0.641468 0.641376 0.641284 0.641192 0.6411 0.641008 0.640916 +0.640824 0.640732 0.64064 0.640548 0.640456 0.640364 0.640272 0.64018 +0.640088 0.639996 0.639904 0.639812 0.63972 0.639628 0.639536 0.639444 +0.639352 0.63926 0.639168 0.639076 0.638984 0.638891 0.638799 0.638707 +0.638615 0.638523 0.638431 0.638339 0.638247 0.638155 0.638062 0.63797 +0.637878 0.637786 0.637694 0.637602 0.637509 0.637417 0.637325 0.637233 +0.637141 0.637048 0.636956 0.636864 0.636772 0.63668 0.636587 0.636495 +0.636403 0.636311 0.636218 0.636126 0.636034 0.635942 0.635849 0.635757 +0.635665 0.635573 0.63548 0.635388 0.635296 0.635203 0.635111 0.635019 +0.634926 0.634834 0.634742 0.63465 0.634557 0.634465 0.634372 0.63428 +0.634188 0.634095 0.634003 0.633911 0.633818 0.633726 0.633634 0.633541 +0.633449 0.633356 0.633264 0.633172 0.633079 0.632987 0.632894 0.632802 +0.632709 0.632617 0.632525 0.632432 0.63234 0.632247 0.632155 0.632062 +0.63197 0.631877 0.631785 0.631692 0.6316 0.631507 0.631415 0.631322 +0.63123 0.631137 0.631045 0.630952 0.63086 0.630767 0.630675 0.630582 +0.63049 0.630397 0.630305 0.630212 0.630119 0.630027 0.629934 0.629842 +0.629749 0.629656 0.629564 0.629471 0.629379 0.629286 0.629193 0.629101 +0.629008 0.628916 0.628823 0.62873 0.628638 0.628545 0.628452 0.62836 +0.628267 0.628174 0.628082 0.627989 0.627896 0.627804 0.627711 0.627618 +0.627526 0.627433 0.62734 0.627247 0.627155 0.627062 0.626969 0.626876 +0.626784 0.626691 0.626598 0.626505 0.626413 0.62632 0.626227 0.626134 +0.626042 0.625949 0.625856 0.625763 0.625671 0.625578 0.625485 0.625392 +0.625299 0.625207 0.625114 0.625021 0.624928 0.624835 0.624742 0.62465 +0.624557 0.624464 0.624371 0.624278 0.624185 0.624092 0.623999 0.623907 +0.623814 0.623721 0.623628 0.623535 0.623442 0.623349 0.623256 0.623163 +0.62307 0.622978 0.622885 0.622792 0.622699 0.622606 0.622513 0.62242 +0.622327 0.622234 0.622141 0.622048 0.621955 0.621862 0.621769 0.621676 +0.621583 0.62149 0.621397 0.621304 0.621211 0.621118 0.621025 0.620932 +0.620839 0.620746 0.620653 0.62056 0.620467 0.620374 0.620281 0.620188 +0.620095 0.620001 0.619908 0.619815 0.619722 0.619629 0.619536 0.619443 +0.61935 0.619257 0.619164 0.619071 0.618977 0.618884 0.618791 0.618698 +0.618605 0.618512 0.618419 0.618326 0.618232 0.618139 0.618046 0.617953 +0.61786 0.617767 0.617673 0.61758 0.617487 0.617394 0.617301 0.617207 +0.617114 0.617021 0.616928 0.616835 0.616741 0.616648 0.616555 0.616462 +0.616368 0.616275 0.616182 0.616089 0.615995 0.615902 0.615809 0.615716 +0.615622 0.615529 0.615436 0.615342 0.615249 0.615156 0.615063 0.614969 +0.614876 0.614783 0.614689 0.614596 0.614503 0.614409 0.614316 0.614223 +0.614129 0.614036 0.613943 0.613849 0.613756 0.613663 0.613569 0.613476 +0.613383 0.613289 0.613196 0.613102 0.613009 0.612916 0.612822 0.612729 +0.612635 0.612542 0.612449 0.612355 0.612262 0.612168 0.612075 0.611981 +0.611888 0.611795 0.611701 0.611608 0.611514 0.611421 0.611327 0.611234 +0.61114 0.611047 0.610953 0.61086 0.610766 0.610673 0.610579 0.610486 +0.610392 0.610299 0.610205 0.610112 0.610018 0.609925 0.609831 0.609738 +0.609644 0.609551 0.609457 0.609363 0.60927 0.609176 0.609083 0.608989 +0.608896 0.608802 0.608709 0.608615 0.608521 0.608428 0.608334 0.608241 +0.608147 0.608053 0.60796 0.607866 0.607773 0.607679 0.607585 0.607492 +0.607398 0.607304 0.607211 0.607117 0.607023 0.60693 0.606836 0.606743 +0.606649 0.606555 0.606461 0.606368 0.606274 0.60618 0.606087 0.605993 +0.605899 0.605806 0.605712 0.605618 0.605525 0.605431 0.605337 0.605243 +0.60515 0.605056 0.604962 0.604868 0.604775 0.604681 0.604587 0.604493 +0.6044 0.604306 0.604212 0.604118 0.604025 0.603931 0.603837 0.603743 +0.603649 0.603556 0.603462 0.603368 0.603274 0.60318 0.603087 0.602993 +0.602899 0.602805 0.602711 0.602618 0.602524 0.60243 0.602336 0.602242 +0.602148 0.602054 0.601961 0.601867 0.601773 0.601679 0.601585 0.601491 +0.601397 0.601304 0.60121 0.601116 0.601022 0.600928 0.600834 0.60074 +0.600646 0.600552 0.600458 0.600365 0.600271 0.600177 0.600083 0.599989 +0.599895 0.599801 0.599707 0.599613 0.599519 0.599425 0.599331 0.599237 +0.599143 0.599049 0.598955 0.598861 0.598767 0.598673 0.598579 0.598485 +0.598391 0.598297 0.598203 0.598109 0.598015 0.597921 0.597827 0.597733 +0.597639 0.597545 0.597451 0.597357 0.597263 0.597169 0.597075 0.596981 +0.596887 0.596793 0.596699 0.596605 0.596511 0.596417 0.596322 0.596228 +0.596134 0.59604 0.595946 0.595852 0.595758 0.595664 0.59557 0.595476 +0.595381 0.595287 0.595193 0.595099 0.595005 0.594911 0.594817 0.594723 +0.594628 0.594534 0.59444 0.594346 0.594252 0.594158 0.594064 0.593969 +0.593875 0.593781 0.593687 0.593593 0.593499 0.593404 0.59331 0.593216 +0.593122 0.593028 0.592933 0.592839 0.592745 0.592651 0.592557 0.592462 +0.592368 0.592274 0.59218 0.592085 0.591991 0.591897 0.591803 0.591708 +0.591614 0.59152 0.591426 0.591331 0.591237 0.591143 0.591049 0.590954 +0.59086 0.590766 0.590672 0.590577 0.590483 0.590389 0.590294 0.5902 +0.590106 0.590011 0.589917 0.589823 0.589729 0.589634 0.58954 0.589446 +0.589351 0.589257 0.589163 0.589068 0.588974 0.58888 0.588785 0.588691 +0.588596 0.588502 0.588408 0.588313 0.588219 0.588125 0.58803 0.587936 +0.587842 0.587747 0.587653 0.587558 0.587464 0.58737 0.587275 0.587181 +0.587086 0.586992 0.586898 0.586803 0.586709 0.586614 0.58652 0.586425 +0.586331 0.586237 0.586142 0.586048 0.585953 0.585859 0.585764 0.58567 +0.585575 0.585481 0.585386 0.585292 0.585198 0.585103 0.585009 0.584914 +0.58482 0.584725 0.584631 0.584536 0.584442 0.584347 0.584253 0.584158 +0.584064 0.583969 0.583875 0.58378 0.583686 0.583591 0.583497 0.583402 +0.583308 0.583213 0.583118 0.583024 0.582929 0.582835 0.58274 0.582646 +0.582551 0.582457 0.582362 0.582267 0.582173 0.582078 0.581984 0.581889 +0.581795 0.5817 0.581605 0.581511 0.581416 0.581322 0.581227 0.581132 +0.581038 0.580943 0.580849 0.580754 0.580659 0.580565 0.58047 0.580375 +0.580281 0.580186 0.580092 0.579997 0.579902 0.579808 0.579713 0.579618 +0.579524 0.579429 0.579334 0.57924 0.579145 0.57905 0.578956 0.578861 +0.578766 0.578672 0.578577 0.578482 0.578388 0.578293 0.578198 0.578104 +0.578009 0.577914 0.577819 0.577725 0.57763 0.577535 0.577441 0.577346 +0.577251 0.577156 0.577062 0.576967 0.576872 0.576778 0.576683 0.576588 +0.576493 0.576399 0.576304 0.576209 0.576114 0.57602 0.575925 0.57583 +0.575735 0.57564 0.575546 0.575451 0.575356 0.575261 0.575167 0.575072 +0.574977 0.574882 0.574787 0.574693 0.574598 0.574503 0.574408 0.574313 +0.574219 0.574124 0.574029 0.573934 0.573839 0.573745 0.57365 0.573555 +0.57346 0.573365 0.57327 0.573176 0.573081 0.572986 0.572891 0.572796 +0.572701 0.572606 0.572512 0.572417 0.572322 0.572227 0.572132 0.572037 +0.571942 0.571847 0.571753 0.571658 0.571563 0.571468 0.571373 0.571278 +0.571183 0.571088 0.570993 0.570899 0.570804 0.570709 0.570614 0.570519 +0.570424 0.570329 0.570234 0.570139 0.570044 0.569949 0.569854 0.56976 +0.569665 0.56957 0.569475 0.56938 0.569285 0.56919 0.569095 0.569 0.568905 +0.56881 0.568715 0.56862 0.568525 0.56843 0.568335 0.56824 0.568145 +0.56805 0.567955 0.56786 0.567765 0.56767 0.567575 0.56748 0.567385 +0.56729 0.567195 0.5671 0.567005 0.56691 0.566815 0.56672 0.566625 +0.56653 0.566435 0.56634 0.566245 0.56615 0.566055 0.56596 0.565865 +0.56577 0.565675 0.56558 0.565485 0.56539 0.565295 0.5652 0.565105 +0.56501 0.564915 0.56482 0.564724 0.564629 0.564534 0.564439 0.564344 +0.564249 0.564154 0.564059 0.563964 0.563869 0.563774 0.563679 0.563583 +0.563488 0.563393 0.563298 0.563203 0.563108 0.563013 0.562918 0.562823 +0.562728 0.562632 0.562537 0.562442 0.562347 0.562252 0.562157 0.562062 +0.561966 0.561871 0.561776 0.561681 0.561586 0.561491 0.561396 0.561301 +0.561205 0.56111 0.561015 0.56092 0.560825 0.56073 0.560634 0.560539 +0.560444 0.560349 0.560254 0.560159 0.560063 0.559968 0.559873 0.559778 +0.559683 0.559587 0.559492 0.559397 0.559302 0.559207 0.559111 0.559016 +0.558921 0.558826 0.558731 0.558635 0.55854 0.558445 0.55835 0.558255 +0.558159 0.558064 0.557969 0.557874 0.557778 0.557683 0.557588 0.557493 +0.557397 0.557302 0.557207 0.557112 0.557016 0.556921 0.556826 0.556731 +0.556635 0.55654 0.556445 0.55635 0.556254 0.556159 0.556064 0.555969 +0.555873 0.555778 0.555683 0.555588 0.555492 0.555397 0.555302 0.555206 +; +#A 24000 0.555111 0.555016 0.55492 0.554825 0.55473 0.554635 0.554539 +0.554444 0.554349 0.554253 0.554158 0.554063 0.553967 0.553872 0.553777 +0.553682 0.553586 0.553491 0.553396 0.5533 0.553205 0.55311 0.553014 +0.552919 0.552824 0.552728 0.552633 0.552538 0.552442 0.552347 0.552252 +0.552156 0.552061 0.551965 0.55187 0.551775 0.551679 0.551584 0.551489 +0.551393 0.551298 0.551203 0.551107 0.551012 0.550916 0.550821 0.550726 +0.55063 0.550535 0.55044 0.550344 0.550249 0.550153 0.550058 0.549963 +0.549867 0.549772 0.549676 0.549581 0.549486 0.54939 0.549295 0.549199 +0.549104 0.549009 0.548913 0.548818 0.548722 0.548627 0.548531 0.548436 +0.548341 0.548245 0.54815 0.548054 0.547959 0.547863 0.547768 0.547673 +0.547577 0.547482 0.547386 0.547291 0.547195 0.5471 0.547005 0.546909 +0.546814 0.546718 0.546623 0.546527 0.546432 0.546336 0.546241 0.546145 +0.54605 0.545954 0.545859 0.545764 0.545668 0.545573 0.545477 0.545382 +0.545286 0.545191 0.545095 0.545 0.544904 0.544809 0.544713 0.544618 +0.544522 0.544427 0.544331 0.544236 0.54414 0.544045 0.543949 0.543854 +0.543758 0.543663 0.543567 0.543472 0.543376 0.543281 0.543185 0.54309 +0.542994 0.542899 0.542803 0.542708 0.542612 0.542517 0.542421 0.542325 +0.54223 0.542134 0.542039 0.541943 0.541848 0.541752 0.541657 0.541561 +0.541466 0.54137 0.541275 0.541179 0.541084 0.540988 0.540892 0.540797 +0.540701 0.540606 0.54051 0.540415 0.540319 0.540223 0.540128 0.540032 +0.539937 0.539841 0.539746 0.53965 0.539554 0.539459 0.539363 0.539268 +0.539172 0.539077 0.538981 0.538885 0.53879 0.538694 0.538599 0.538503 +0.538408 0.538312 0.538216 0.538121 0.538025 0.53793 0.537834 0.537738 +0.537643 0.537547 0.537452 0.537356 0.53726 0.537165 0.537069 0.536974 +0.536878 0.536782 0.536687 0.536591 0.536495 0.5364 0.536304 0.536209 +0.536113 0.536017 0.535922 0.535826 0.53573 0.535635 0.535539 0.535444 +0.535348 0.535252 0.535157 0.535061 0.534965 0.53487 0.534774 0.534678 +0.534583 0.534487 0.534392 0.534296 0.5342 0.534105 0.534009 0.533913 +0.533818 0.533722 0.533626 0.533531 0.533435 0.533339 0.533244 0.533148 +0.533052 0.532957 0.532861 0.532765 0.53267 0.532574 0.532478 0.532383 +0.532287 0.532191 0.532096 0.532 0.531904 0.531809 0.531713 0.531617 +0.531522 0.531426 0.53133 0.531235 0.531139 0.531043 0.530947 0.530852 +0.530756 0.53066 0.530565 0.530469 0.530373 0.530278 0.530182 0.530086 +0.52999 0.529895 0.529799 0.529703 0.529608 0.529512 0.529416 0.529321 +0.529225 0.529129 0.529033 0.528938 0.528842 0.528746 0.528651 0.528555 +0.528459 0.528363 0.528268 0.528172 0.528076 0.527981 0.527885 0.527789 +0.527693 0.527598 0.527502 0.527406 0.52731 0.527215 0.527119 0.527023 +0.526928 0.526832 0.526736 0.52664 0.526545 0.526449 0.526353 0.526257 +0.526162 0.526066 0.52597 0.525874 0.525779 0.525683 0.525587 0.525491 +0.525396 0.5253 0.525204 0.525108 0.525013 0.524917 0.524821 0.524725 +0.52463 0.524534 0.524438 0.524342 0.524247 0.524151 0.524055 0.523959 +0.523863 0.523768 0.523672 0.523576 0.52348 0.523385 0.523289 0.523193 +0.523097 0.523002 0.522906 0.52281 0.522714 0.522618 0.522523 0.522427 +0.522331 0.522235 0.52214 0.522044 0.521948 0.521852 0.521756 0.521661 +0.521565 0.521469 0.521373 0.521278 0.521182 0.521086 0.52099 0.520894 +0.520799 0.520703 0.520607 0.520511 0.520415 0.52032 0.520224 0.520128 +0.520032 0.519936 0.519841 0.519745 0.519649 0.519553 0.519457 0.519362 +0.519266 0.51917 0.519074 0.518978 0.518883 0.518787 0.518691 0.518595 +0.518499 0.518404 0.518308 0.518212 0.518116 0.51802 0.517925 0.517829 +0.517733 0.517637 0.517541 0.517446 0.51735 0.517254 0.517158 0.517062 +0.516966 0.516871 0.516775 0.516679 0.516583 0.516487 0.516391 0.516296 +0.5162 0.516104 0.516008 0.515912 0.515817 0.515721 0.515625 0.515529 +0.515433 0.515337 0.515242 0.515146 0.51505 0.514954 0.514858 0.514762 +0.514667 0.514571 0.514475 0.514379 0.514283 0.514187 0.514092 0.513996 +0.5139 0.513804 0.513708 0.513612 0.513517 0.513421 0.513325 0.513229 +0.513133 0.513037 0.512942 0.512846 0.51275 0.512654 0.512558 0.512462 +0.512366 0.512271 0.512175 0.512079 0.511983 0.511887 0.511791 0.511696 +0.5116 0.511504 0.511408 0.511312 0.511216 0.51112 0.511025 0.510929 +0.510833 0.510737 0.510641 0.510545 0.510449 0.510354 0.510258 0.510162 +0.510066 0.50997 0.509874 0.509778 0.509683 0.509587 0.509491 0.509395 +0.509299 0.509203 0.509108 0.509012 0.508916 0.50882 0.508724 0.508628 +0.508532 0.508437 0.508341 0.508245 0.508149 0.508053 0.507957 0.507861 +0.507765 0.50767 0.507574 0.507478 0.507382 0.507286 0.50719 0.507094 +0.506999 0.506903 0.506807 0.506711 0.506615 0.506519 0.506423 0.506328 +0.506232 0.506136 0.50604 0.505944 0.505848 0.505752 0.505656 0.505561 +0.505465 0.505369 0.505273 0.505177 0.505081 0.504985 0.504889 0.504794 +0.504698 0.504602 0.504506 0.50441 0.504314 0.504218 0.504123 0.504027 +0.503931 0.503835 0.503739 0.503643 0.503547 0.503451 0.503356 0.50326 +0.503164 0.503068 0.502972 0.502876 0.50278 0.502684 0.502589 0.502493 +0.502397 0.502301 0.502205 0.502109 0.502013 0.501917 0.501822 0.501726 +0.50163 0.501534 0.501438 0.501342 0.501246 0.50115 0.501055 0.500959 +0.500863 0.500767 0.500671 0.500575 0.500479 0.500383 0.500288 0.500192 +0.500096 0.5 0.499904 0.499808 0.499712 0.499617 0.499521 0.499425 +0.499329 0.499233 0.499137 0.499041 0.498945 0.49885 0.498754 0.498658 +0.498562 0.498466 0.49837 0.498274 0.498178 0.498083 0.497987 0.497891 +0.497795 0.497699 0.497603 0.497507 0.497411 0.497316 0.49722 0.497124 +0.497028 0.496932 0.496836 0.49674 0.496644 0.496549 0.496453 0.496357 +0.496261 0.496165 0.496069 0.495973 0.495877 0.495782 0.495686 0.49559 +0.495494 0.495398 0.495302 0.495206 0.495111 0.495015 0.494919 0.494823 +0.494727 0.494631 0.494535 0.494439 0.494344 0.494248 0.494152 0.494056 +0.49396 0.493864 0.493768 0.493672 0.493577 0.493481 0.493385 0.493289 +0.493193 0.493097 0.493001 0.492906 0.49281 0.492714 0.492618 0.492522 +0.492426 0.49233 0.492235 0.492139 0.492043 0.491947 0.491851 0.491755 +0.491659 0.491563 0.491468 0.491372 0.491276 0.49118 0.491084 0.490988 +0.490892 0.490797 0.490701 0.490605 0.490509 0.490413 0.490317 0.490222 +0.490126 0.49003 0.489934 0.489838 0.489742 0.489646 0.489551 0.489455 +0.489359 0.489263 0.489167 0.489071 0.488975 0.48888 0.488784 0.488688 +0.488592 0.488496 0.4884 0.488304 0.488209 0.488113 0.488017 0.487921 +0.487825 0.487729 0.487634 0.487538 0.487442 0.487346 0.48725 0.487154 +0.487058 0.486963 0.486867 0.486771 0.486675 0.486579 0.486483 0.486388 +0.486292 0.486196 0.4861 0.486004 0.485908 0.485813 0.485717 0.485621 +0.485525 0.485429 0.485333 0.485238 0.485142 0.485046 0.48495 0.484854 +0.484758 0.484663 0.484567 0.484471 0.484375 0.484279 0.484183 0.484088 +0.483992 0.483896 0.4838 0.483704 0.483609 0.483513 0.483417 0.483321 +0.483225 0.483129 0.483034 0.482938 0.482842 0.482746 0.48265 0.482554 +0.482459 0.482363 0.482267 0.482171 0.482075 0.48198 0.481884 0.481788 +0.481692 0.481596 0.481501 0.481405 0.481309 0.481213 0.481117 0.481022 +0.480926 0.48083 0.480734 0.480638 0.480543 0.480447 0.480351 0.480255 +0.480159 0.480064 0.479968 0.479872 0.479776 0.47968 0.479585 0.479489 +0.479393 0.479297 0.479201 0.479106 0.47901 0.478914 0.478818 0.478722 +0.478627 0.478531 0.478435 0.478339 0.478244 0.478148 0.478052 0.477956 +0.47786 0.477765 0.477669 0.477573 0.477477 0.477381 0.477286 0.47719 +0.477094 0.476998 0.476903 0.476807 0.476711 0.476615 0.47652 0.476424 +0.476328 0.476232 0.476137 0.476041 0.475945 0.475849 0.475753 0.475658 +0.475562 0.475466 0.47537 0.475275 0.475179 0.475083 0.474987 0.474892 +0.474796 0.4747 0.474604 0.474509 0.474413 0.474317 0.474221 0.474126 +0.47403 0.473934 0.473838 0.473743 0.473647 0.473551 0.473455 0.47336 +0.473264 0.473168 0.473072 0.472977 0.472881 0.472785 0.47269 0.472594 +0.472498 0.472402 0.472307 0.472211 0.472115 0.472019 0.471924 0.471828 +0.471732 0.471637 0.471541 0.471445 0.471349 0.471254 0.471158 0.471062 +0.470967 0.470871 0.470775 0.470679 0.470584 0.470488 0.470392 0.470297 +0.470201 0.470105 0.47001 0.469914 0.469818 0.469722 0.469627 0.469531 +0.469435 0.46934 0.469244 0.469148 0.469053 0.468957 0.468861 0.468765 +0.46867 0.468574 0.468478 0.468383 0.468287 0.468191 0.468096 0.468 +0.467904 0.467809 0.467713 0.467617 0.467522 0.467426 0.46733 0.467235 +0.467139 0.467043 0.466948 0.466852 0.466756 0.466661 0.466565 0.466469 +0.466374 0.466278 0.466182 0.466087 0.465991 0.465895 0.4658 0.465704 +0.465608 0.465513 0.465417 0.465322 0.465226 0.46513 0.465035 0.464939 +0.464843 0.464748 0.464652 0.464556 0.464461 0.464365 0.46427 0.464174 +0.464078 0.463983 0.463887 0.463791 0.463696 0.4636 0.463505 0.463409 +0.463313 0.463218 0.463122 0.463026 0.462931 0.462835 0.46274 0.462644 +0.462548 0.462453 0.462357 0.462262 0.462166 0.46207 0.461975 0.461879 +0.461784 0.461688 0.461592 0.461497 0.461401 0.461306 0.46121 0.461115 +0.461019 0.460923 0.460828 0.460732 0.460637 0.460541 0.460445 0.46035 +0.460254 0.460159 0.460063 0.459968 0.459872 0.459777 0.459681 0.459585 +0.45949; +#A 25000 0.459394 0.459299 0.459203 0.459108 0.459012 0.458917 0.458821 +0.458725 0.45863 0.458534 0.458439 0.458343 0.458248 0.458152 0.458057 +0.457961 0.457866 0.45777 0.457675 0.457579 0.457483 0.457388 0.457292 +0.457197 0.457101 0.457006 0.45691 0.456815 0.456719 0.456624 0.456528 +0.456433 0.456337 0.456242 0.456146 0.456051 0.455955 0.45586 0.455764 +0.455669 0.455573 0.455478 0.455382 0.455287 0.455191 0.455096 0.455 +0.454905 0.454809 0.454714 0.454618 0.454523 0.454427 0.454332 0.454236 +0.454141 0.454046 0.45395 0.453855 0.453759 0.453664 0.453568 0.453473 +0.453377 0.453282 0.453186 0.453091 0.452995 0.4529 0.452805 0.452709 +0.452614 0.452518 0.452423 0.452327 0.452232 0.452137 0.452041 0.451946 +0.45185 0.451755 0.451659 0.451564 0.451469 0.451373 0.451278 0.451182 +0.451087 0.450991 0.450896 0.450801 0.450705 0.45061 0.450514 0.450419 +0.450324 0.450228 0.450133 0.450037 0.449942 0.449847 0.449751 0.449656 +0.44956 0.449465 0.44937 0.449274 0.449179 0.449084 0.448988 0.448893 +0.448797 0.448702 0.448607 0.448511 0.448416 0.448321 0.448225 0.44813 +0.448035 0.447939 0.447844 0.447748 0.447653 0.447558 0.447462 0.447367 +0.447272 0.447176 0.447081 0.446986 0.44689 0.446795 0.4467 0.446604 +0.446509 0.446414 0.446318 0.446223 0.446128 0.446033 0.445937 0.445842 +0.445747 0.445651 0.445556 0.445461 0.445365 0.44527 0.445175 0.445079 +0.444984 0.444889 0.444794 0.444698 0.444603 0.444508 0.444412 0.444317 +0.444222 0.444127 0.444031 0.443936 0.443841 0.443746 0.44365 0.443555 +0.44346 0.443365 0.443269 0.443174 0.443079 0.442984 0.442888 0.442793 +0.442698 0.442603 0.442507 0.442412 0.442317 0.442222 0.442126 0.442031 +0.441936 0.441841 0.441745 0.44165 0.441555 0.44146 0.441365 0.441269 +0.441174 0.441079 0.440984 0.440889 0.440793 0.440698 0.440603 0.440508 +0.440413 0.440317 0.440222 0.440127 0.440032 0.439937 0.439841 0.439746 +0.439651 0.439556 0.439461 0.439366 0.43927 0.439175 0.43908 0.438985 +0.43889 0.438795 0.4387 0.438604 0.438509 0.438414 0.438319 0.438224 +0.438129 0.438034 0.437938 0.437843 0.437748 0.437653 0.437558 0.437463 +0.437368 0.437273 0.437177 0.437082 0.436987 0.436892 0.436797 0.436702 +0.436607 0.436512 0.436417 0.436321 0.436226 0.436131 0.436036 0.435941 +0.435846 0.435751 0.435656 0.435561 0.435466 0.435371 0.435276 0.435181 +0.435085 0.43499 0.434895 0.4348 0.434705 0.43461 0.434515 0.43442 +0.434325 0.43423 0.434135 0.43404 0.433945 0.43385 0.433755 0.43366 +0.433565 0.43347 0.433375 0.43328 0.433185 0.43309 0.432995 0.4329 +0.432805 0.43271 0.432615 0.43252 0.432425 0.43233 0.432235 0.43214 +0.432045 0.43195 0.431855 0.43176 0.431665 0.43157 0.431475 0.43138 +0.431285 0.43119 0.431095 0.431 0.430905 0.43081 0.430715 0.43062 0.430525 +0.43043 0.430335 0.43024 0.430146 0.430051 0.429956 0.429861 0.429766 +0.429671 0.429576 0.429481 0.429386 0.429291 0.429196 0.429101 0.429006 +0.428912 0.428817 0.428722 0.428627 0.428532 0.428437 0.428342 0.428247 +0.428152 0.428058 0.427963 0.427868 0.427773 0.427678 0.427583 0.427488 +0.427394 0.427299 0.427204 0.427109 0.427014 0.426919 0.426824 0.42673 +0.426635 0.42654 0.426445 0.42635 0.426255 0.426161 0.426066 0.425971 +0.425876 0.425781 0.425687 0.425592 0.425497 0.425402 0.425307 0.425213 +0.425118 0.425023 0.424928 0.424833 0.424739 0.424644 0.424549 0.424454 +0.424359 0.424265 0.42417 0.424075 0.42398 0.423886 0.423791 0.423696 +0.423601 0.423507 0.423412 0.423317 0.423222 0.423128 0.423033 0.422938 +0.422844 0.422749 0.422654 0.422559 0.422465 0.42237 0.422275 0.422181 +0.422086 0.421991 0.421896 0.421802 0.421707 0.421612 0.421518 0.421423 +0.421328 0.421234 0.421139 0.421044 0.42095 0.420855 0.42076 0.420666 +0.420571 0.420476 0.420382 0.420287 0.420192 0.420098 0.420003 0.419908 +0.419814 0.419719 0.419625 0.41953 0.419435 0.419341 0.419246 0.419151 +0.419057 0.418962 0.418868 0.418773 0.418678 0.418584 0.418489 0.418395 +0.4183 0.418205 0.418111 0.418016 0.417922 0.417827 0.417733 0.417638 +0.417543 0.417449 0.417354 0.41726 0.417165 0.417071 0.416976 0.416882 +0.416787 0.416693 0.416598 0.416503 0.416409 0.416314 0.41622 0.416125 +0.416031 0.415936 0.415842 0.415747 0.415653 0.415558 0.415464 0.415369 +0.415275 0.41518 0.415086 0.414991 0.414897 0.414802 0.414708 0.414614 +0.414519 0.414425 0.41433 0.414236 0.414141 0.414047 0.413952 0.413858 +0.413763 0.413669 0.413575 0.41348 0.413386 0.413291 0.413197 0.413102 +0.413008 0.412914 0.412819 0.412725 0.41263 0.412536 0.412442 0.412347 +0.412253 0.412158 0.412064 0.41197 0.411875 0.411781 0.411687 0.411592 +0.411498 0.411404 0.411309 0.411215 0.41112 0.411026 0.410932 0.410837 +0.410743 0.410649 0.410554 0.41046 0.410366 0.410271 0.410177 0.410083 +0.409989 0.409894 0.4098 0.409706 0.409611 0.409517 0.409423 0.409328 +0.409234 0.40914 0.409046 0.408951 0.408857 0.408763 0.408669 0.408574 +0.40848 0.408386 0.408292 0.408197 0.408103 0.408009 0.407915 0.40782 +0.407726 0.407632 0.407538 0.407443 0.407349 0.407255 0.407161 0.407067 +0.406972 0.406878 0.406784 0.40669 0.406596 0.406501 0.406407 0.406313 +0.406219 0.406125 0.406031 0.405936 0.405842 0.405748 0.405654 0.40556 +0.405466 0.405372 0.405277 0.405183 0.405089 0.404995 0.404901 0.404807 +0.404713 0.404619 0.404524 0.40443 0.404336 0.404242 0.404148 0.404054 +0.40396 0.403866 0.403772 0.403678 0.403583 0.403489 0.403395 0.403301 +0.403207 0.403113 0.403019 0.402925 0.402831 0.402737 0.402643 0.402549 +0.402455 0.402361 0.402267 0.402173 0.402079 0.401985 0.401891 0.401797 +0.401703 0.401609 0.401515 0.401421 0.401327 0.401233 0.401139 0.401045 +0.400951 0.400857 0.400763 0.400669 0.400575 0.400481 0.400387 0.400293 +0.400199 0.400105 0.400011 0.399917 0.399823 0.399729 0.399636 0.399542 +0.399448 0.399354 0.39926 0.399166 0.399072 0.398978 0.398884 0.39879 +0.398696 0.398603 0.398509 0.398415 0.398321 0.398227 0.398133 0.398039 +0.397946 0.397852 0.397758 0.397664 0.39757 0.397476 0.397382 0.397289 +0.397195 0.397101 0.397007 0.396913 0.39682 0.396726 0.396632 0.396538 +0.396444 0.396351 0.396257 0.396163 0.396069 0.395975 0.395882 0.395788 +0.395694 0.3956 0.395507 0.395413 0.395319 0.395225 0.395132 0.395038 +0.394944 0.39485 0.394757 0.394663 0.394569 0.394475 0.394382 0.394288 +0.394194 0.394101 0.394007 0.393913 0.39382 0.393726 0.393632 0.393539 +0.393445 0.393351 0.393257 0.393164 0.39307 0.392977 0.392883 0.392789 +0.392696 0.392602 0.392508 0.392415 0.392321 0.392227 0.392134 0.39204 +0.391947 0.391853 0.391759 0.391666 0.391572 0.391479 0.391385 0.391291 +0.391198 0.391104 0.391011 0.390917 0.390824 0.39073 0.390636 0.390543 +0.390449 0.390356 0.390262 0.390169 0.390075 0.389982 0.389888 0.389795 +0.389701 0.389608 0.389514 0.389421 0.389327 0.389234 0.38914 0.389047 +0.388953 0.38886 0.388766 0.388673 0.388579 0.388486 0.388392 0.388299 +0.388205 0.388112 0.388019 0.387925 0.387832 0.387738 0.387645 0.387551 +0.387458 0.387365 0.387271 0.387178 0.387084 0.386991 0.386898 0.386804 +0.386711 0.386617 0.386524 0.386431 0.386337 0.386244 0.386151 0.386057 +0.385964 0.385871 0.385777 0.385684 0.385591 0.385497 0.385404 0.385311 +0.385217 0.385124 0.385031 0.384937 0.384844 0.384751 0.384658 0.384564 +0.384471 0.384378 0.384284 0.384191 0.384098 0.384005 0.383911 0.383818 +0.383725 0.383632 0.383538 0.383445 0.383352 0.383259 0.383165 0.383072 +0.382979 0.382886 0.382793 0.382699 0.382606 0.382513 0.38242 0.382327 +0.382233 0.38214 0.382047 0.381954 0.381861 0.381768 0.381674 0.381581 +0.381488 0.381395 0.381302 0.381209 0.381116 0.381023 0.380929 0.380836 +0.380743 0.38065 0.380557 0.380464 0.380371 0.380278 0.380185 0.380092 +0.379998 0.379905 0.379812 0.379719 0.379626 0.379533 0.37944 0.379347 +0.379254 0.379161 0.379068 0.378975 0.378882 0.378789 0.378696 0.378603 +0.37851 0.378417 0.378324 0.378231 0.378138 0.378045 0.377952 0.377859 +0.377766 0.377673 0.37758 0.377487 0.377394 0.377301 0.377208 0.377115 +0.377022 0.37693 0.376837 0.376744 0.376651 0.376558 0.376465 0.376372 +0.376279 0.376186 0.376093 0.376001 0.375908 0.375815 0.375722 0.375629 +0.375536 0.375443 0.375351 0.375258 0.375165 0.375072 0.374979 0.374886 +0.374793 0.374701 0.374608 0.374515 0.374422 0.374329 0.374237 0.374144 +0.374051 0.373958 0.373866 0.373773 0.37368 0.373587 0.373494 0.373402 +0.373309 0.373216 0.373123 0.373031 0.372938 0.372845 0.372753 0.37266 +0.372567 0.372474 0.372382 0.372289 0.372196 0.372104 0.372011 0.371918 +0.371826 0.371733 0.37164 0.371548 0.371455 0.371362 0.37127 0.371177 +0.371084 0.370992 0.370899 0.370807 0.370714 0.370621 0.370529 0.370436 +0.370344 0.370251 0.370158 0.370066 0.369973 0.369881 0.369788 0.369695 +0.369603 0.36951 0.369418 0.369325 0.369233 0.36914 0.369048 0.368955 +0.368863 0.36877 0.368678 0.368585 0.368493 0.3684 0.368308 0.368215 +0.368123 0.36803 0.367938 0.367845 0.367753 0.36766 0.367568 0.367475 +0.367383 0.367291 0.367198 0.367106 0.367013 0.366921 0.366828 0.366736 +0.366644 0.366551 0.366459 0.366366 0.366274 0.366182 0.366089 0.365997 +0.365905 0.365812 0.36572 0.365627 0.365535 0.365443 0.36535 0.365258 +; +#A 26000 0.365166 0.365074 0.364981 0.364889 0.364797 0.364704 0.364612 +0.36452 0.364427 0.364335 0.364243 0.364151 0.364058 0.363966 0.363874 +0.363782 0.363689 0.363597 0.363505 0.363413 0.36332 0.363228 0.363136 +0.363044 0.362952 0.362859 0.362767 0.362675 0.362583 0.362491 0.362398 +0.362306 0.362214 0.362122 0.36203 0.361938 0.361845 0.361753 0.361661 +0.361569 0.361477 0.361385 0.361293 0.361201 0.361109 0.361016 0.360924 +0.360832 0.36074 0.360648 0.360556 0.360464 0.360372 0.36028 0.360188 +0.360096 0.360004 0.359912 0.35982 0.359728 0.359636 0.359544 0.359452 +0.35936 0.359268 0.359176 0.359084 0.358992 0.3589 0.358808 0.358716 +0.358624 0.358532 0.35844 0.358348 0.358256 0.358164 0.358072 0.35798 +0.357888 0.357796 0.357704 0.357612 0.357521 0.357429 0.357337 0.357245 +0.357153 0.357061 0.356969 0.356877 0.356785 0.356694 0.356602 0.35651 +0.356418 0.356326 0.356234 0.356143 0.356051 0.355959 0.355867 0.355775 +0.355684 0.355592 0.3555 0.355408 0.355316 0.355225 0.355133 0.355041 +0.354949 0.354858 0.354766 0.354674 0.354582 0.354491 0.354399 0.354307 +0.354216 0.354124 0.354032 0.35394 0.353849 0.353757 0.353665 0.353574 +0.353482 0.35339 0.353299 0.353207 0.353115 0.353024 0.352932 0.352841 +0.352749 0.352657 0.352566 0.352474 0.352382 0.352291 0.352199 0.352108 +0.352016 0.351925 0.351833 0.351741 0.35165 0.351558 0.351467 0.351375 +0.351284 0.351192 0.351101 0.351009 0.350918 0.350826 0.350735 0.350643 +0.350552 0.35046 0.350369 0.350277 0.350186 0.350094 0.350003 0.349911 +0.34982 0.349728 0.349637 0.349546 0.349454 0.349363 0.349271 0.34918 +0.349088 0.348997 0.348906 0.348814 0.348723 0.348631 0.34854 0.348449 +0.348357 0.348266 0.348175 0.348083 0.347992 0.347901 0.347809 0.347718 +0.347627 0.347535 0.347444 0.347353 0.347261 0.34717 0.347079 0.346988 +0.346896 0.346805 0.346714 0.346623 0.346531 0.34644 0.346349 0.346258 +0.346166 0.346075 0.345984 0.345893 0.345802 0.34571 0.345619 0.345528 +0.345437 0.345346 0.345254 0.345163 0.345072 0.344981 0.34489 0.344799 +0.344708 0.344616 0.344525 0.344434 0.344343 0.344252 0.344161 0.34407 +0.343979 0.343888 0.343797 0.343705 0.343614 0.343523 0.343432 0.343341 +0.34325 0.343159 0.343068 0.342977 0.342886 0.342795 0.342704 0.342613 +0.342522 0.342431 0.34234 0.342249 0.342158 0.342067 0.341976 0.341885 +0.341794 0.341703 0.341612 0.341521 0.341431 0.34134 0.341249 0.341158 +0.341067 0.340976 0.340885 0.340794 0.340703 0.340612 0.340522 0.340431 +0.34034 0.340249 0.340158 0.340067 0.339976 0.339886 0.339795 0.339704 +0.339613 0.339522 0.339432 0.339341 0.33925 0.339159 0.339068 0.338978 +0.338887 0.338796 0.338705 0.338615 0.338524 0.338433 0.338342 0.338252 +0.338161 0.33807 0.33798 0.337889 0.337798 0.337708 0.337617 0.337526 +0.337436 0.337345 0.337254 0.337164 0.337073 0.336982 0.336892 0.336801 +0.33671 0.33662 0.336529 0.336439 0.336348 0.336257 0.336167 0.336076 +0.335986 0.335895 0.335805 0.335714 0.335623 0.335533 0.335442 0.335352 +0.335261 0.335171 0.33508 0.33499 0.334899 0.334809 0.334718 0.334628 +0.334537 0.334447 0.334356 0.334266 0.334175 0.334085 0.333995 0.333904 +0.333814 0.333723 0.333633 0.333542 0.333452 0.333362 0.333271 0.333181 +0.333091 0.333 0.33291 0.332819 0.332729 0.332639 0.332548 0.332458 +0.332368 0.332277 0.332187 0.332097 0.332006 0.331916 0.331826 0.331736 +0.331645 0.331555 0.331465 0.331375 0.331284 0.331194 0.331104 0.331014 +0.330923 0.330833 0.330743 0.330653 0.330562 0.330472 0.330382 0.330292 +0.330202 0.330112 0.330021 0.329931 0.329841 0.329751 0.329661 0.329571 +0.329481 0.32939 0.3293 0.32921 0.32912 0.32903 0.32894 0.32885 0.32876 +0.32867 0.32858 0.32849 0.328399 0.328309 0.328219 0.328129 0.328039 +0.327949 0.327859 0.327769 0.327679 0.327589 0.327499 0.327409 0.327319 +0.327229 0.327139 0.327049 0.326959 0.32687 0.32678 0.32669 0.3266 +0.32651 0.32642 0.32633 0.32624 0.32615 0.32606 0.32597 0.325881 0.325791 +0.325701 0.325611 0.325521 0.325431 0.325341 0.325252 0.325162 0.325072 +0.324982 0.324892 0.324803 0.324713 0.324623 0.324533 0.324443 0.324354 +0.324264 0.324174 0.324084 0.323995 0.323905 0.323815 0.323725 0.323636 +0.323546 0.323456 0.323367 0.323277 0.323187 0.323098 0.323008 0.322918 +0.322829 0.322739 0.322649 0.32256 0.32247 0.32238 0.322291 0.322201 +0.322112 0.322022 0.321932 0.321843 0.321753 0.321664 0.321574 0.321485 +0.321395 0.321305 0.321216 0.321126 0.321037 0.320947 0.320858 0.320768 +0.320679 0.320589 0.3205 0.32041 0.320321 0.320231 0.320142 0.320052 +0.319963 0.319874 0.319784 0.319695 0.319605 0.319516 0.319427 0.319337 +0.319248 0.319158 0.319069 0.31898 0.31889 0.318801 0.318711 0.318622 +0.318533 0.318443 0.318354 0.318265 0.318175 0.318086 0.317997 0.317908 +0.317818 0.317729 0.31764 0.317551 0.317461 0.317372 0.317283 0.317194 +0.317104 0.317015 0.316926 0.316837 0.316747 0.316658 0.316569 0.31648 +0.316391 0.316301 0.316212 0.316123 0.316034 0.315945 0.315856 0.315767 +0.315677 0.315588 0.315499 0.31541 0.315321 0.315232 0.315143 0.315054 +0.314965 0.314876 0.314787 0.314698 0.314608 0.314519 0.31443 0.314341 +0.314252 0.314163 0.314074 0.313985 0.313896 0.313807 0.313718 0.313629 +0.313541 0.313452 0.313363 0.313274 0.313185 0.313096 0.313007 0.312918 +0.312829 0.31274 0.312651 0.312562 0.312474 0.312385 0.312296 0.312207 +0.312118 0.312029 0.31194 0.311852 0.311763 0.311674 0.311585 0.311496 +0.311408 0.311319 0.31123 0.311141 0.311052 0.310964 0.310875 0.310786 +0.310697 0.310609 0.31052 0.310431 0.310342 0.310254 0.310165 0.310076 +0.309988 0.309899 0.30981 0.309722 0.309633 0.309544 0.309456 0.309367 +0.309278 0.30919 0.309101 0.309013 0.308924 0.308835 0.308747 0.308658 +0.30857 0.308481 0.308393 0.308304 0.308215 0.308127 0.308038 0.30795 +0.307861 0.307773 0.307684 0.307596 0.307507 0.307419 0.30733 0.307242 +0.307154 0.307065 0.306977 0.306888 0.3068 0.306711 0.306623 0.306534 +0.306446 0.306358 0.306269 0.306181 0.306093 0.306004 0.305916 0.305827 +0.305739 0.305651 0.305562 0.305474 0.305386 0.305298 0.305209 0.305121 +0.305033 0.304944 0.304856 0.304768 0.30468 0.304591 0.304503 0.304415 +0.304327 0.304238 0.30415 0.304062 0.303974 0.303886 0.303797 0.303709 +0.303621 0.303533 0.303445 0.303357 0.303268 0.30318 0.303092 0.303004 +0.302916 0.302828 0.30274 0.302652 0.302563 0.302475 0.302387 0.302299 +0.302211 0.302123 0.302035 0.301947 0.301859 0.301771 0.301683 0.301595 +0.301507 0.301419 0.301331 0.301243 0.301155 0.301067 0.300979 0.300891 +0.300803 0.300715 0.300627 0.300539 0.300452 0.300364 0.300276 0.300188 +0.3001 0.300012 0.299924 0.299836 0.299749 0.299661 0.299573 0.299485 +0.299397 0.299309 0.299222 0.299134 0.299046 0.298958 0.29887 0.298783 +0.298695 0.298607 0.298519 0.298432 0.298344 0.298256 0.298168 0.298081 +0.297993 0.297905 0.297818 0.29773 0.297642 0.297555 0.297467 0.297379 +0.297292 0.297204 0.297116 0.297029 0.296941 0.296854 0.296766 0.296678 +0.296591 0.296503 0.296416 0.296328 0.296241 0.296153 0.296065 0.295978 +0.29589 0.295803 0.295715 0.295628 0.29554 0.295453 0.295365 0.295278 +0.29519 0.295103 0.295016 0.294928 0.294841 0.294753 0.294666 0.294578 +0.294491 0.294404 0.294316 0.294229 0.294141 0.294054 0.293967 0.293879 +0.293792 0.293705 0.293617 0.29353 0.293443 0.293355 0.293268 0.293181 +0.293094 0.293006 0.292919 0.292832 0.292744 0.292657 0.29257 0.292483 +0.292396 0.292308 0.292221 0.292134 0.292047 0.29196 0.291872 0.291785 +0.291698 0.291611 0.291524 0.291437 0.29135 0.291262 0.291175 0.291088 +0.291001 0.290914 0.290827 0.29074 0.290653 0.290566 0.290479 0.290392 +0.290305 0.290217 0.29013 0.290043 0.289956 0.289869 0.289782 0.289695 +0.289608 0.289522 0.289435 0.289348 0.289261 0.289174 0.289087 0.289 +0.288913 0.288826 0.288739 0.288652 0.288565 0.288478 0.288392 0.288305 +0.288218 0.288131 0.288044 0.287957 0.287871 0.287784 0.287697 0.28761 +0.287523 0.287437 0.28735 0.287263 0.287176 0.28709 0.287003 0.286916 +0.286829 0.286743 0.286656 0.286569 0.286482 0.286396 0.286309 0.286222 +0.286136 0.286049 0.285962 0.285876 0.285789 0.285703 0.285616 0.285529 +0.285443 0.285356 0.28527 0.285183 0.285096 0.28501 0.284923 0.284837 +0.28475 0.284664 0.284577 0.284491 0.284404 0.284318 0.284231 0.284145 +0.284058 0.283972 0.283885 0.283799 0.283712 0.283626 0.28354 0.283453 +0.283367 0.28328 0.283194 0.283107 0.283021 0.282935 0.282848 0.282762 +0.282676 0.282589 0.282503 0.282417 0.28233 0.282244 0.282158 0.282071 +0.281985 0.281899 0.281813 0.281726 0.28164 0.281554 0.281468 0.281381 +0.281295 0.281209 0.281123 0.281037 0.28095 0.280864 0.280778 0.280692 +0.280606 0.28052 0.280433 0.280347 0.280261 0.280175 0.280089 0.280003 +0.279917 0.279831 0.279745 0.279659 0.279572 0.279486 0.2794 0.279314 +0.279228 0.279142 0.279056 0.27897 0.278884 0.278798 0.278712 0.278626 +0.27854 0.278454 0.278369 0.278283 0.278197 0.278111 0.278025 0.277939 +0.277853 0.277767 0.277681 0.277595 0.27751 0.277424 0.277338 0.277252 +0.277166 0.27708 0.276995 0.276909 0.276823 0.276737 0.276651 0.276566 +0.27648 0.276394 0.276308 0.276223 0.276137 0.276051 0.275965; +#A 27000 0.27588 0.275794 0.275708 0.275623 0.275537 0.275451 0.275366 +0.27528 0.275194 0.275109 0.275023 0.274937 0.274852 0.274766 0.274681 +0.274595 0.27451 0.274424 0.274338 0.274253 0.274167 0.274082 0.273996 +0.273911 0.273825 0.27374 0.273654 0.273569 0.273483 0.273398 0.273312 +0.273227 0.273141 0.273056 0.272971 0.272885 0.2728 0.272714 0.272629 +0.272544 0.272458 0.272373 0.272287 0.272202 0.272117 0.272031 0.271946 +0.271861 0.271776 0.27169 0.271605 0.27152 0.271434 0.271349 0.271264 +0.271179 0.271093 0.271008 0.270923 0.270838 0.270752 0.270667 0.270582 +0.270497 0.270412 0.270327 0.270241 0.270156 0.270071 0.269986 0.269901 +0.269816 0.269731 0.269646 0.26956 0.269475 0.26939 0.269305 0.26922 +0.269135 0.26905 0.268965 0.26888 0.268795 0.26871 0.268625 0.26854 +0.268455 0.26837 0.268285 0.2682 0.268115 0.26803 0.267945 0.26786 +0.267776 0.267691 0.267606 0.267521 0.267436 0.267351 0.267266 0.267181 +0.267097 0.267012 0.266927 0.266842 0.266757 0.266672 0.266588 0.266503 +0.266418 0.266333 0.266249 0.266164 0.266079 0.265994 0.26591 0.265825 +0.26574 0.265656 0.265571 0.265486 0.265402 0.265317 0.265232 0.265148 +0.265063 0.264978 0.264894 0.264809 0.264724 0.26464 0.264555 0.264471 +0.264386 0.264302 0.264217 0.264133 0.264048 0.263963 0.263879 0.263794 +0.26371 0.263625 0.263541 0.263457 0.263372 0.263288 0.263203 0.263119 +0.263034 0.26295 0.262865 0.262781 0.262697 0.262612 0.262528 0.262444 +0.262359 0.262275 0.262191 0.262106 0.262022 0.261938 0.261853 0.261769 +0.261685 0.2616 0.261516 0.261432 0.261348 0.261263 0.261179 0.261095 +0.261011 0.260926 0.260842 0.260758 0.260674 0.26059 0.260506 0.260421 +0.260337 0.260253 0.260169 0.260085 0.260001 0.259917 0.259833 0.259748 +0.259664 0.25958 0.259496 0.259412 0.259328 0.259244 0.25916 0.259076 +0.258992 0.258908 0.258824 0.25874 0.258656 0.258572 0.258488 0.258404 +0.25832 0.258236 0.258153 0.258069 0.257985 0.257901 0.257817 0.257733 +0.257649 0.257565 0.257482 0.257398 0.257314 0.25723 0.257146 0.257062 +0.256979 0.256895 0.256811 0.256727 0.256644 0.25656 0.256476 0.256392 +0.256309 0.256225 0.256141 0.256058 0.255974 0.25589 0.255807 0.255723 +0.255639 0.255556 0.255472 0.255388 0.255305 0.255221 0.255138 0.255054 +0.25497 0.254887 0.254803 0.25472 0.254636 0.254553 0.254469 0.254386 +0.254302 0.254219 0.254135 0.254052 0.253968 0.253885 0.253801 0.253718 +0.253634 0.253551 0.253468 0.253384 0.253301 0.253217 0.253134 0.253051 +0.252967 0.252884 0.2528 0.252717 0.252634 0.252551 0.252467 0.252384 +0.252301 0.252217 0.252134 0.252051 0.251968 0.251884 0.251801 0.251718 +0.251635 0.251551 0.251468 0.251385 0.251302 0.251219 0.251136 0.251052 +0.250969 0.250886 0.250803 0.25072 0.250637 0.250554 0.250471 0.250388 +0.250304 0.250221 0.250138 0.250055 0.249972 0.249889 0.249806 0.249723 +0.24964 0.249557 0.249474 0.249391 0.249308 0.249225 0.249143 0.24906 +0.248977 0.248894 0.248811 0.248728 0.248645 0.248562 0.248479 0.248396 +0.248314 0.248231 0.248148 0.248065 0.247982 0.2479 0.247817 0.247734 +0.247651 0.247568 0.247486 0.247403 0.24732 0.247237 0.247155 0.247072 +0.246989 0.246907 0.246824 0.246741 0.246659 0.246576 0.246493 0.246411 +0.246328 0.246246 0.246163 0.24608 0.245998 0.245915 0.245833 0.24575 +0.245667 0.245585 0.245502 0.24542 0.245337 0.245255 0.245172 0.24509 +0.245007 0.244925 0.244842 0.24476 0.244678 0.244595 0.244513 0.24443 +0.244348 0.244266 0.244183 0.244101 0.244018 0.243936 0.243854 0.243771 +0.243689 0.243607 0.243524 0.243442 0.24336 0.243278 0.243195 0.243113 +0.243031 0.242949 0.242866 0.242784 0.242702 0.24262 0.242538 0.242455 +0.242373 0.242291 0.242209 0.242127 0.242045 0.241963 0.24188 0.241798 +0.241716 0.241634 0.241552 0.24147 0.241388 0.241306 0.241224 0.241142 +0.24106 0.240978 0.240896 0.240814 0.240732 0.24065 0.240568 0.240486 +0.240404 0.240322 0.24024 0.240158 0.240076 0.239994 0.239912 0.239831 +0.239749 0.239667 0.239585 0.239503 0.239421 0.23934 0.239258 0.239176 +0.239094 0.239012 0.238931 0.238849 0.238767 0.238685 0.238604 0.238522 +0.23844 0.238358 0.238277 0.238195 0.238113 0.238032 0.23795 0.237868 +0.237787 0.237705 0.237624 0.237542 0.23746 0.237379 0.237297 0.237216 +0.237134 0.237052 0.236971 0.236889 0.236808 0.236726 0.236645 0.236563 +0.236482 0.2364 0.236319 0.236238 0.236156 0.236075 0.235993 0.235912 +0.23583 0.235749 0.235668 0.235586 0.235505 0.235424 0.235342 0.235261 +0.235179 0.235098 0.235017 0.234936 0.234854 0.234773 0.234692 0.23461 +0.234529 0.234448 0.234367 0.234286 0.234204 0.234123 0.234042 0.233961 +0.23388 0.233798 0.233717 0.233636 0.233555 0.233474 0.233393 0.233312 +0.233231 0.233149 0.233068 0.232987 0.232906 0.232825 0.232744 0.232663 +0.232582 0.232501 0.23242 0.232339 0.232258 0.232177 0.232096 0.232015 +0.231934 0.231854 0.231773 0.231692 0.231611 0.23153 0.231449 0.231368 +0.231287 0.231206 0.231126 0.231045 0.230964 0.230883 0.230802 0.230722 +0.230641 0.23056 0.230479 0.230399 0.230318 0.230237 0.230156 0.230076 +0.229995 0.229914 0.229834 0.229753 0.229672 0.229592 0.229511 0.22943 +0.22935 0.229269 0.229189 0.229108 0.229027 0.228947 0.228866 0.228786 +0.228705 0.228625 0.228544 0.228464 0.228383 0.228303 0.228222 0.228142 +0.228061 0.227981 0.2279 0.22782 0.227739 0.227659 0.227579 0.227498 +0.227418 0.227338 0.227257 0.227177 0.227096 0.227016 0.226936 0.226856 +0.226775 0.226695 0.226615 0.226534 0.226454 0.226374 0.226294 0.226213 +0.226133 0.226053 0.225973 0.225893 0.225812 0.225732 0.225652 0.225572 +0.225492 0.225412 0.225332 0.225251 0.225171 0.225091 0.225011 0.224931 +0.224851 0.224771 0.224691 0.224611 0.224531 0.224451 0.224371 0.224291 +0.224211 0.224131 0.224051 0.223971 0.223891 0.223811 0.223731 0.223651 +0.223572 0.223492 0.223412 0.223332 0.223252 0.223172 0.223092 0.223013 +0.222933 0.222853 0.222773 0.222693 0.222614 0.222534 0.222454 0.222374 +0.222295 0.222215 0.222135 0.222055 0.221976 0.221896 0.221816 0.221737 +0.221657 0.221577 0.221498 0.221418 0.221339 0.221259 0.221179 0.2211 +0.22102 0.220941 0.220861 0.220782 0.220702 0.220623 0.220543 0.220464 +0.220384 0.220305 0.220225 0.220146 0.220066 0.219987 0.219907 0.219828 +0.219749 0.219669 0.21959 0.21951 0.219431 0.219352 0.219272 0.219193 +0.219114 0.219034 0.218955 0.218876 0.218797 0.218717 0.218638 0.218559 +0.21848 0.2184 0.218321 0.218242 0.218163 0.218084 0.218004 0.217925 +0.217846 0.217767 0.217688 0.217609 0.21753 0.21745 0.217371 0.217292 +0.217213 0.217134 0.217055 0.216976 0.216897 0.216818 0.216739 0.21666 +0.216581 0.216502 0.216423 0.216344 0.216265 0.216186 0.216107 0.216028 +0.215949 0.215871 0.215792 0.215713 0.215634 0.215555 0.215476 0.215397 +0.215319 0.21524 0.215161 0.215082 0.215003 0.214925 0.214846 0.214767 +0.214688 0.21461 0.214531 0.214452 0.214374 0.214295 0.214216 0.214137 +0.214059 0.21398 0.213902 0.213823 0.213744 0.213666 0.213587 0.213509 +0.21343 0.213351 0.213273 0.213194 0.213116 0.213037 0.212959 0.21288 +0.212802 0.212723 0.212645 0.212566 0.212488 0.21241 0.212331 0.212253 +0.212174 0.212096 0.212018 0.211939 0.211861 0.211782 0.211704 0.211626 +0.211547 0.211469 0.211391 0.211313 0.211234 0.211156 0.211078 0.211 +0.210921 0.210843 0.210765 0.210687 0.210608 0.21053 0.210452 0.210374 +0.210296 0.210218 0.21014 0.210061 0.209983 0.209905 0.209827 0.209749 +0.209671 0.209593 0.209515 0.209437 0.209359 0.209281 0.209203 0.209125 +0.209047 0.208969 0.208891 0.208813 0.208735 0.208657 0.208579 0.208501 +0.208424 0.208346 0.208268 0.20819 0.208112 0.208034 0.207956 0.207879 +0.207801 0.207723 0.207645 0.207567 0.20749 0.207412 0.207334 0.207256 +0.207179 0.207101 0.207023 0.206946 0.206868 0.20679 0.206713 0.206635 +0.206557 0.20648 0.206402 0.206325 0.206247 0.206169 0.206092 0.206014 +0.205937 0.205859 0.205782 0.205704 0.205627 0.205549 0.205472 0.205394 +0.205317 0.205239 0.205162 0.205084 0.205007 0.20493 0.204852 0.204775 +0.204698 0.20462 0.204543 0.204465 0.204388 0.204311 0.204234 0.204156 +0.204079 0.204002 0.203924 0.203847 0.20377 0.203693 0.203615 0.203538 +0.203461 0.203384 0.203307 0.20323 0.203152 0.203075 0.202998 0.202921 +0.202844 0.202767 0.20269 0.202613 0.202536 0.202458 0.202381 0.202304 +0.202227 0.20215 0.202073 0.201996 0.201919 0.201842 0.201765 0.201688 +0.201612 0.201535 0.201458 0.201381 0.201304 0.201227 0.20115 0.201073 +0.200996 0.20092 0.200843 0.200766 0.200689 0.200612 0.200536 0.200459 +0.200382 0.200305 0.200229 0.200152 0.200075 0.199998 0.199922 0.199845 +0.199768 0.199692 0.199615 0.199538 0.199462 0.199385 0.199309 0.199232 +0.199155 0.199079 0.199002 0.198926 0.198849 0.198773 0.198696 0.19862 +0.198543 0.198467 0.19839 0.198314 0.198237 0.198161 0.198084 0.198008 +0.197932 0.197855 0.197779 0.197702 0.197626 0.19755 0.197473 0.197397 +0.197321 0.197244 0.197168 0.197092 0.197016 0.196939 0.196863 0.196787 +0.196711 0.196634 0.196558 0.196482 0.196406 0.19633 0.196254 0.196177 +0.196101 0.196025 0.195949 0.195873 0.195797 0.195721 0.195645 0.195569 +0.195493 0.195416 0.19534 0.195264 0.195188 0.195112 0.195036 0.194961 +0.194885; +#A 28000 0.194809 0.194733 0.194657 0.194581 0.194505 0.194429 0.194353 +0.194277 0.194201 0.194126 0.19405 0.193974 0.193898 0.193822 0.193747 +0.193671 0.193595 0.193519 0.193443 0.193368 0.193292 0.193216 0.193141 +0.193065 0.192989 0.192914 0.192838 0.192762 0.192687 0.192611 0.192535 +0.19246 0.192384 0.192309 0.192233 0.192158 0.192082 0.192006 0.191931 +0.191855 0.19178 0.191704 0.191629 0.191553 0.191478 0.191403 0.191327 +0.191252 0.191176 0.191101 0.191026 0.19095 0.190875 0.190799 0.190724 +0.190649 0.190573 0.190498 0.190423 0.190348 0.190272 0.190197 0.190122 +0.190047 0.189971 0.189896 0.189821 0.189746 0.189671 0.189595 0.18952 +0.189445 0.18937 0.189295 0.18922 0.189145 0.18907 0.188995 0.188919 +0.188844 0.188769 0.188694 0.188619 0.188544 0.188469 0.188394 0.188319 +0.188244 0.188169 0.188094 0.18802 0.187945 0.18787 0.187795 0.18772 +0.187645 0.18757 0.187495 0.187421 0.187346 0.187271 0.187196 0.187121 +0.187047 0.186972 0.186897 0.186822 0.186748 0.186673 0.186598 0.186523 +0.186449 0.186374 0.186299 0.186225 0.18615 0.186076 0.186001 0.185926 +0.185852 0.185777 0.185703 0.185628 0.185553 0.185479 0.185404 0.18533 +0.185255 0.185181 0.185106 0.185032 0.184957 0.184883 0.184809 0.184734 +0.18466 0.184585 0.184511 0.184437 0.184362 0.184288 0.184214 0.184139 +0.184065 0.183991 0.183916 0.183842 0.183768 0.183694 0.183619 0.183545 +0.183471 0.183397 0.183322 0.183248 0.183174 0.1831 0.183026 0.182952 +0.182877 0.182803 0.182729 0.182655 0.182581 0.182507 0.182433 0.182359 +0.182285 0.182211 0.182137 0.182063 0.181989 0.181915 0.181841 0.181767 +0.181693 0.181619 0.181545 0.181471 0.181397 0.181323 0.18125 0.181176 +0.181102 0.181028 0.180954 0.18088 0.180807 0.180733 0.180659 0.180585 +0.180512 0.180438 0.180364 0.18029 0.180217 0.180143 0.180069 0.179996 +0.179922 0.179848 0.179775 0.179701 0.179627 0.179554 0.17948 0.179407 +0.179333 0.179259 0.179186 0.179112 0.179039 0.178965 0.178892 0.178818 +0.178745 0.178671 0.178598 0.178525 0.178451 0.178378 0.178304 0.178231 +0.178158 0.178084 0.178011 0.177938 0.177864 0.177791 0.177718 0.177644 +0.177571 0.177498 0.177424 0.177351 0.177278 0.177205 0.177132 0.177058 +0.176985 0.176912 0.176839 0.176766 0.176693 0.176619 0.176546 0.176473 +0.1764 0.176327 0.176254 0.176181 0.176108 0.176035 0.175962 0.175889 +0.175816 0.175743 0.17567 0.175597 0.175524 0.175451 0.175378 0.175305 +0.175232 0.175159 0.175086 0.175014 0.174941 0.174868 0.174795 0.174722 +0.174649 0.174577 0.174504 0.174431 0.174358 0.174286 0.174213 0.17414 +0.174067 0.173995 0.173922 0.173849 0.173777 0.173704 0.173631 0.173559 +0.173486 0.173414 0.173341 0.173268 0.173196 0.173123 0.173051 0.172978 +0.172906 0.172833 0.172761 0.172688 0.172616 0.172543 0.172471 0.172398 +0.172326 0.172254 0.172181 0.172109 0.172036 0.171964 0.171892 0.171819 +0.171747 0.171675 0.171602 0.17153 0.171458 0.171386 0.171313 0.171241 +0.171169 0.171097 0.171024 0.170952 0.17088 0.170808 0.170736 0.170664 +0.170591 0.170519 0.170447 0.170375 0.170303 0.170231 0.170159 0.170087 +0.170015 0.169943 0.169871 0.169799 0.169727 0.169655 0.169583 0.169511 +0.169439 0.169367 0.169295 0.169223 0.169151 0.169079 0.169008 0.168936 +0.168864 0.168792 0.16872 0.168648 0.168577 0.168505 0.168433 0.168361 +0.16829 0.168218 0.168146 0.168074 0.168003 0.167931 0.167859 0.167788 +0.167716 0.167645 0.167573 0.167501 0.16743 0.167358 0.167287 0.167215 +0.167143 0.167072 0.167 0.166929 0.166857 0.166786 0.166714 0.166643 +0.166571 0.1665 0.166429 0.166357 0.166286 0.166214 0.166143 0.166072 +0.166 0.165929 0.165858 0.165786 0.165715 0.165644 0.165572 0.165501 +0.16543 0.165359 0.165287 0.165216 0.165145 0.165074 0.165003 0.164932 +0.16486 0.164789 0.164718 0.164647 0.164576 0.164505 0.164434 0.164363 +0.164292 0.164221 0.164149 0.164078 0.164007 0.163936 0.163865 0.163795 +0.163724 0.163653 0.163582 0.163511 0.16344 0.163369 0.163298 0.163227 +0.163156 0.163086 0.163015 0.162944 0.162873 0.162802 0.162731 0.162661 +0.16259 0.162519 0.162448 0.162378 0.162307 0.162236 0.162166 0.162095 +0.162024 0.161954 0.161883 0.161812 0.161742 0.161671 0.161601 0.16153 +0.161459 0.161389 0.161318 0.161248 0.161177 0.161107 0.161036 0.160966 +0.160895 0.160825 0.160755 0.160684 0.160614 0.160543 0.160473 0.160403 +0.160332 0.160262 0.160192 0.160121 0.160051 0.159981 0.15991 0.15984 +0.15977 0.159699 0.159629 0.159559 0.159489 0.159419 0.159348 0.159278 +0.159208 0.159138 0.159068 0.158998 0.158928 0.158857 0.158787 0.158717 +0.158647 0.158577 0.158507 0.158437 0.158367 0.158297 0.158227 0.158157 +0.158087 0.158017 0.157947 0.157877 0.157808 0.157738 0.157668 0.157598 +0.157528 0.157458 0.157388 0.157319 0.157249 0.157179 0.157109 0.157039 +0.15697 0.1569 0.15683 0.15676 0.156691 0.156621 0.156551 0.156482 +0.156412 0.156342 0.156273 0.156203 0.156133 0.156064 0.155994 0.155925 +0.155855 0.155786 0.155716 0.155647 0.155577 0.155508 0.155438 0.155369 +0.155299 0.15523 0.15516 0.155091 0.155021 0.154952 0.154883 0.154813 +0.154744 0.154675 0.154605 0.154536 0.154467 0.154397 0.154328 0.154259 +0.15419 0.15412 0.154051 0.153982 0.153913 0.153844 0.153774 0.153705 +0.153636 0.153567 0.153498 0.153429 0.15336 0.15329 0.153221 0.153152 +0.153083 0.153014 0.152945 0.152876 0.152807 0.152738 0.152669 0.1526 +0.152531 0.152462 0.152394 0.152325 0.152256 0.152187 0.152118 0.152049 +0.15198 0.151911 0.151843 0.151774 0.151705 0.151636 0.151567 0.151499 +0.15143 0.151361 0.151293 0.151224 0.151155 0.151086 0.151018 0.150949 +0.150881 0.150812 0.150743 0.150675 0.150606 0.150538 0.150469 0.1504 +0.150332 0.150263 0.150195 0.150126 0.150058 0.149989 0.149921 0.149852 +0.149784 0.149716 0.149647 0.149579 0.14951 0.149442 0.149374 0.149305 +0.149237 0.149169 0.1491 0.149032 0.148964 0.148896 0.148827 0.148759 +0.148691 0.148623 0.148554 0.148486 0.148418 0.14835 0.148282 0.148214 +0.148145 0.148077 0.148009 0.147941 0.147873 0.147805 0.147737 0.147669 +0.147601 0.147533 0.147465 0.147397 0.147329 0.147261 0.147193 0.147125 +0.147057 0.146989 0.146921 0.146854 0.146786 0.146718 0.14665 0.146582 +0.146514 0.146447 0.146379 0.146311 0.146243 0.146176 0.146108 0.14604 +0.145972 0.145905 0.145837 0.145769 0.145702 0.145634 0.145566 0.145499 +0.145431 0.145364 0.145296 0.145228 0.145161 0.145093 0.145026 0.144958 +0.144891 0.144823 0.144756 0.144688 0.144621 0.144554 0.144486 0.144419 +0.144351 0.144284 0.144217 0.144149 0.144082 0.144015 0.143947 0.14388 +0.143813 0.143745 0.143678 0.143611 0.143544 0.143476 0.143409 0.143342 +0.143275 0.143208 0.14314 0.143073 0.143006 0.142939 0.142872 0.142805 +0.142738 0.142671 0.142604 0.142537 0.14247 0.142403 0.142336 0.142269 +0.142202 0.142135 0.142068 0.142001 0.141934 0.141867 0.1418 0.141733 +0.141666 0.141599 0.141533 0.141466 0.141399 0.141332 0.141265 0.141199 +0.141132 0.141065 0.140998 0.140932 0.140865 0.140798 0.140731 0.140665 +0.140598 0.140531 0.140465 0.140398 0.140332 0.140265 0.140198 0.140132 +0.140065 0.139999 0.139932 0.139866 0.139799 0.139733 0.139666 0.1396 +0.139533 0.139467 0.1394 0.139334 0.139268 0.139201 0.139135 0.139069 +0.139002 0.138936 0.13887 0.138803 0.138737 0.138671 0.138604 0.138538 +0.138472 0.138406 0.13834 0.138273 0.138207 0.138141 0.138075 0.138009 +0.137943 0.137876 0.13781 0.137744 0.137678 0.137612 0.137546 0.13748 +0.137414 0.137348 0.137282 0.137216 0.13715 0.137084 0.137018 0.136952 +0.136886 0.13682 0.136755 0.136689 0.136623 0.136557 0.136491 0.136425 +0.136359 0.136294 0.136228 0.136162 0.136096 0.136031 0.135965 0.135899 +0.135833 0.135768 0.135702 0.135636 0.135571 0.135505 0.13544 0.135374 +0.135308 0.135243 0.135177 0.135112 0.135046 0.134981 0.134915 0.13485 +0.134784 0.134719 0.134653 0.134588 0.134522 0.134457 0.134391 0.134326 +0.134261 0.134195 0.13413 0.134065 0.133999 0.133934 0.133869 0.133803 +0.133738 0.133673 0.133608 0.133542 0.133477 0.133412 0.133347 0.133282 +0.133216 0.133151 0.133086 0.133021 0.132956 0.132891 0.132826 0.132761 +0.132696 0.132631 0.132566 0.132501 0.132436 0.132371 0.132306 0.132241 +0.132176 0.132111 0.132046 0.131981 0.131916 0.131851 0.131786 0.131721 +0.131657 0.131592 0.131527 0.131462 0.131397 0.131333 0.131268 0.131203 +0.131138 0.131074 0.131009 0.130944 0.13088 0.130815 0.13075 0.130686 +0.130621 0.130556 0.130492 0.130427 0.130363 0.130298 0.130233 0.130169 +0.130104 0.13004 0.129975 0.129911 0.129847 0.129782 0.129718 0.129653 +0.129589 0.129524 0.12946 0.129396 0.129331 0.129267 0.129203 0.129138 +0.129074 0.12901 0.128946 0.128881 0.128817 0.128753 0.128689 0.128624 +0.12856 0.128496 0.128432 0.128368 0.128304 0.128239 0.128175 0.128111 +0.128047 0.127983 0.127919 0.127855 0.127791 0.127727 0.127663 0.127599 +0.127535 0.127471 0.127407 0.127343 0.127279 0.127215 0.127152 0.127088 +0.127024 0.12696 0.126896 0.126832 0.126769 0.126705 0.126641 0.126577 +0.126513 0.12645 0.126386 0.126322 0.126259 0.126195 0.126131 0.126068 +0.126004 0.12594 0.125877 0.125813 0.12575 0.125686 0.125622 0.125559 +0.125495 0.125432 0.125368 0.125305 0.125241 0.125178 0.125114 0.125051 +0.124988; +#A 29000 0.124924 0.124861 0.124797 0.124734 0.124671 0.124607 0.124544 +0.124481 0.124417 0.124354 0.124291 0.124228 0.124164 0.124101 0.124038 +0.123975 0.123912 0.123848 0.123785 0.123722 0.123659 0.123596 0.123533 +0.12347 0.123407 0.123344 0.12328 0.123217 0.123154 0.123091 0.123028 +0.122965 0.122903 0.12284 0.122777 0.122714 0.122651 0.122588 0.122525 +0.122462 0.122399 0.122336 0.122274 0.122211 0.122148 0.122085 0.122022 +0.12196 0.121897 0.121834 0.121772 0.121709 0.121646 0.121584 0.121521 +0.121458 0.121396 0.121333 0.12127 0.121208 0.121145 0.121083 0.12102 +0.120958 0.120895 0.120833 0.12077 0.120708 0.120645 0.120583 0.12052 +0.120458 0.120395 0.120333 0.120271 0.120208 0.120146 0.120084 0.120021 +0.119959 0.119897 0.119834 0.119772 0.11971 0.119648 0.119585 0.119523 +0.119461 0.119399 0.119337 0.119274 0.119212 0.11915 0.119088 0.119026 +0.118964 0.118902 0.11884 0.118778 0.118716 0.118654 0.118592 0.11853 +0.118468 0.118406 0.118344 0.118282 0.11822 0.118158 0.118096 0.118034 +0.117972 0.117911 0.117849 0.117787 0.117725 0.117663 0.117602 0.11754 +0.117478 0.117416 0.117355 0.117293 0.117231 0.11717 0.117108 0.117046 +0.116985 0.116923 0.116861 0.1168 0.116738 0.116677 0.116615 0.116554 +0.116492 0.116431 0.116369 0.116308 0.116246 0.116185 0.116123 0.116062 +0.116 0.115939 0.115878 0.115816 0.115755 0.115694 0.115632 0.115571 +0.11551 0.115448 0.115387 0.115326 0.115265 0.115203 0.115142 0.115081 +0.11502 0.114959 0.114897 0.114836 0.114775 0.114714 0.114653 0.114592 +0.114531 0.11447 0.114409 0.114348 0.114287 0.114226 0.114165 0.114104 +0.114043 0.113982 0.113921 0.11386 0.113799 0.113738 0.113677 0.113616 +0.113556 0.113495 0.113434 0.113373 0.113312 0.113252 0.113191 0.11313 +0.113069 0.113009 0.112948 0.112887 0.112827 0.112766 0.112705 0.112645 +0.112584 0.112523 0.112463 0.112402 0.112342 0.112281 0.112221 0.11216 +0.1121 0.112039 0.111979 0.111918 0.111858 0.111797 0.111737 0.111677 +0.111616 0.111556 0.111495 0.111435 0.111375 0.111314 0.111254 0.111194 +0.111134 0.111073 0.111013 0.110953 0.110893 0.110832 0.110772 0.110712 +0.110652 0.110592 0.110532 0.110472 0.110411 0.110351 0.110291 0.110231 +0.110171 0.110111 0.110051 0.109991 0.109931 0.109871 0.109811 0.109751 +0.109691 0.109631 0.109571 0.109512 0.109452 0.109392 0.109332 0.109272 +0.109212 0.109153 0.109093 0.109033 0.108973 0.108914 0.108854 0.108794 +0.108734 0.108675 0.108615 0.108555 0.108496 0.108436 0.108376 0.108317 +0.108257 0.108198 0.108138 0.108079 0.108019 0.10796 0.1079 0.107841 +0.107781 0.107722 0.107662 0.107603 0.107543 0.107484 0.107425 0.107365 +0.107306 0.107247 0.107187 0.107128 0.107069 0.107009 0.10695 0.106891 +0.106832 0.106772 0.106713 0.106654 0.106595 0.106536 0.106476 0.106417 +0.106358 0.106299 0.10624 0.106181 0.106122 0.106063 0.106004 0.105945 +0.105886 0.105827 0.105768 0.105709 0.10565 0.105591 0.105532 0.105473 +0.105414 0.105355 0.105297 0.105238 0.105179 0.10512 0.105061 0.105002 +0.104944 0.104885 0.104826 0.104767 0.104709 0.10465 0.104591 0.104533 +0.104474 0.104415 0.104357 0.104298 0.104239 0.104181 0.104122 0.104064 +0.104005 0.103947 0.103888 0.10383 0.103771 0.103713 0.103654 0.103596 +0.103537 0.103479 0.103421 0.103362 0.103304 0.103246 0.103187 0.103129 +0.103071 0.103012 0.102954 0.102896 0.102837 0.102779 0.102721 0.102663 +0.102605 0.102546 0.102488 0.10243 0.102372 0.102314 0.102256 0.102198 +0.10214 0.102082 0.102024 0.101965 0.101907 0.101849 0.101791 0.101733 +0.101676 0.101618 0.10156 0.101502 0.101444 0.101386 0.101328 0.10127 +0.101212 0.101155 0.101097 0.101039 0.100981 0.100923 0.100866 0.100808 +0.10075 0.100693 0.100635 0.100577 0.100519 0.100462 0.100404 0.100347 +0.100289 0.100231 0.100174 0.100116 0.100059 0.100001 0.0999436 0.0998861 +0.0998286 0.0997712 0.0997137 0.0996563 0.0995988 0.0995414 0.099484 +0.0994266 0.0993693 0.0993119 0.0992546 0.0991972 0.0991399 0.0990826 +0.0990254 0.0989681 0.0989108 0.0988536 0.0987964 0.0987392 0.098682 +0.0986248 0.0985676 0.0985105 0.0984534 0.0983962 0.0983391 0.098282 +0.098225 0.0981679 0.0981109 0.0980538 0.0979968 0.0979398 0.0978828 +0.0978259 0.0977689 0.097712 0.097655 0.0975981 0.0975412 0.0974843 +0.0974275 0.0973706 0.0973138 0.097257 0.0972001 0.0971433 0.0970866 +0.0970298 0.0969731 0.0969163 0.0968596 0.0968029 0.0967462 0.0966895 +0.0966329 0.0965762 0.0965196 0.096463 0.0964064 0.0963498 0.0962932 +0.0962367 0.0961801 0.0961236 0.0960671 0.0960106 0.0959541 0.0958976 +0.0958412 0.0957847 0.0957283 0.0956719 0.0956155 0.0955591 0.0955028 +0.0954464 0.0953901 0.0953338 0.0952775 0.0952212 0.0951649 0.0951086 +0.0950524 0.0949962 0.09494 0.0948838 0.0948276 0.0947714 0.0947152 +0.0946591 0.094603 0.0945469 0.0944908 0.0944347 0.0943786 0.0943226 +0.0942665 0.0942105 0.0941545 0.0940985 0.0940425 0.0939866 0.0939306 +0.0938747 0.0938188 0.0937629 0.093707 0.0936511 0.0935953 0.0935394 +0.0934836 0.0934278 0.093372 0.0933162 0.0932604 0.0932047 0.093149 +0.0930932 0.0930375 0.0929818 0.0929262 0.0928705 0.0928148 0.0927592 +0.0927036 0.092648 0.0925924 0.0925368 0.0924813 0.0924257 0.0923702 +0.0923147 0.0922592 0.0922037 0.0921482 0.0920928 0.0920374 0.0919819 +0.0919265 0.0918711 0.0918158 0.0917604 0.091705 0.0916497 0.0915944 +0.0915391 0.0914838 0.0914285 0.0913733 0.091318 0.0912628 0.0912076 +0.0911524 0.0910972 0.091042 0.0909869 0.0909318 0.0908766 0.0908215 +0.0907664 0.0907114 0.0906563 0.0906013 0.0905462 0.0904912 0.0904362 +0.0903812 0.0903262 0.0902713 0.0902163 0.0901614 0.0901065 0.0900516 +0.0899967 0.0899419 0.089887 0.0898322 0.0897774 0.0897225 0.0896678 +0.089613 0.0895582 0.0895035 0.0894487 0.089394 0.0893393 0.0892846 +0.08923 0.0891753 0.0891207 0.0890661 0.0890114 0.0889568 0.0889023 +0.0888477 0.0887932 0.0887386 0.0886841 0.0886296 0.0885751 0.0885206 +0.0884662 0.0884117 0.0883573 0.0883029 0.0882485 0.0881941 0.0881397 +0.0880854 0.0880311 0.0879767 0.0879224 0.0878681 0.0878139 0.0877596 +0.0877054 0.0876511 0.0875969 0.0875427 0.0874885 0.0874343 0.0873802 +0.087326 0.0872719 0.0872178 0.0871637 0.0871096 0.0870556 0.0870015 +0.0869475 0.0868935 0.0868395 0.0867855 0.0867315 0.0866776 0.0866236 +0.0865697 0.0865158 0.0864619 0.086408 0.0863541 0.0863003 0.0862464 +0.0861926 0.0861388 0.086085 0.0860312 0.0859775 0.0859237 0.08587 +0.0858163 0.0857626 0.0857089 0.0856552 0.0856016 0.0855479 0.0854943 +0.0854407 0.0853871 0.0853335 0.08528 0.0852264 0.0851729 0.0851194 +0.0850659 0.0850124 0.0849589 0.0849055 0.084852 0.0847986 0.0847452 +0.0846918 0.0846384 0.0845851 0.0845317 0.0844784 0.0844251 0.0843718 +0.0843185 0.0842652 0.0842119 0.0841587 0.0841055 0.0840523 0.0839991 +0.0839459 0.0838927 0.0838396 0.0837864 0.0837333 0.0836802 0.0836271 +0.083574 0.083521 0.0834679 0.0834149 0.0833619 0.0833089 0.0832559 +0.083203 0.08315 0.0830971 0.0830442 0.0829912 0.0829384 0.0828855 +0.0828326 0.0827798 0.082727 0.0826741 0.0826213 0.0825686 0.0825158 +0.082463 0.0824103 0.0823576 0.0823049 0.0822522 0.0821995 0.0821469 +0.0820942 0.0820416 0.081989 0.0819364 0.0818838 0.0818312 0.0817787 +0.0817261 0.0816736 0.0816211 0.0815686 0.0815161 0.0814637 0.0814112 +0.0813588 0.0813064 0.081254 0.0812016 0.0811493 0.0810969 0.0810446 +0.0809922 0.0809399 0.0808876 0.0808354 0.0807831 0.0807309 0.0806786 +0.0806264 0.0805742 0.080522 0.0804699 0.0804177 0.0803656 0.0803135 +0.0802614 0.0802093 0.0801572 0.0801051 0.0800531 0.0800011 0.0799491 +0.0798971 0.0798451 0.0797931 0.0797412 0.0796892 0.0796373 0.0795854 +0.0795335 0.0794816 0.0794298 0.0793779 0.0793261 0.0792743 0.0792225 +0.0791707 0.079119 0.0790672 0.0790155 0.0789638 0.0789121 0.0788604 +0.0788087 0.078757 0.0787054 0.0786538 0.0786022 0.0785506 0.078499 +0.0784474 0.0783959 0.0783443 0.0782928 0.0782413 0.0781898 0.0781384 +0.0780869 0.0780355 0.077984 0.0779326 0.0778812 0.0778299 0.0777785 +0.0777272 0.0776758 0.0776245 0.0775732 0.0775219 0.0774707 0.0774194 +0.0773682 0.0773169 0.0772657 0.0772146 0.0771634 0.0771122 0.0770611 +0.0770099 0.0769588 0.0769077 0.0768567 0.0768056 0.0767545 0.0767035 +0.0766525 0.0766015 0.0765505 0.0764995 0.0764486 0.0763976 0.0763467 +0.0762958 0.0762449 0.076194 0.0761431 0.0760923 0.0760414 0.0759906 +0.0759398 0.075889 0.0758383 0.0757875 0.0757368 0.0756861 0.0756353 +0.0755847 0.075534 0.0754833 0.0754327 0.075382 0.0753314 0.0752808 +0.0752302 0.0751797 0.0751291 0.0750786 0.0750281 0.0749776 0.0749271 +0.0748766 0.0748261 0.0747757 0.0747253 0.0746748 0.0746244 0.0745741 +0.0745237 0.0744734 0.074423 0.0743727 0.0743224 0.0742721 0.0742218 +0.0741716 0.0741213 0.0740711 0.0740209 0.0739707 0.0739205 0.0738704 +0.0738202 0.0737701 0.07372 0.0736699 0.0736198 0.0735698 0.0735197 +0.0734697 0.0734196 0.0733696 0.0733197 0.0732697 0.0732197 0.0731698 +0.0731198 0.0730699 0.07302 0.0729702 0.0729203 0.0728705 0.0728206 +0.0727708 0.072721 0.0726712 0.0726214 0.0725717 0.072522 0.0724722 +0.0724225 0.0723728 0.0723232 0.0722735 0.0722239 0.0721742 0.0721246 +0.072075 0.0720254 0.0719759 0.0719263 0.0718768 0.0718273 0.0717778 +0.0717283 0.0716788 0.0716294 0.0715799 0.0715305 0.0714811 0.0714317 +0.0713823 0.071333 0.0712836 0.0712343 0.071185 0.0711357 0.0710864 +0.0710372 0.0709879 0.0709387 0.0708895 0.0708402 0.0707911 0.0707419 +0.0706927 0.0706436 0.0705945 0.0705454 0.0704963 0.0704472 0.0703981 +0.0703491 0.0703001 0.070251 0.0702021 0.0701531 0.0701041 0.0700552 +0.0700062 0.0699573 0.0699084 0.0698595 0.0698106 0.0697618 0.069713 +0.0696641 0.0696153 0.0695665 0.0695178 0.069469 0.0694202 0.0693715 +0.0693228 0.0692741 0.0692254 0.0691768 0.0691281 0.0690795 0.0690309 +0.0689823 0.0689337 0.0688851 0.0688366; +#A 30000 0.068788 0.0687395 0.068691 0.0686425 0.068594 0.0685456 0.0684971 +0.0684487 0.0684003 0.0683519 0.0683035 0.0682551 0.0682068 0.0681585 +0.0681102 0.0680619 0.0680136 0.0679653 0.067917 0.0678688 0.0678206 +0.0677724 0.0677242 0.067676 0.0676279 0.0675797 0.0675316 0.0674835 +0.0674354 0.0673873 0.0673393 0.0672912 0.0672432 0.0671952 0.0671472 +0.0670992 0.0670512 0.0670033 0.0669553 0.0669074 0.0668595 0.0668116 +0.0667638 0.0667159 0.0666681 0.0666203 0.0665724 0.0665247 0.0664769 +0.0664291 0.0663814 0.0663337 0.0662859 0.0662382 0.0661906 0.0661429 +0.0660953 0.0660476 0.066 0.0659524 0.0659048 0.0658573 0.0658097 0.0657622 +0.0657146 0.0656671 0.0656197 0.0655722 0.0655247 0.0654773 0.0654299 +0.0653825 0.0653351 0.0652877 0.0652403 0.065193 0.0651457 0.0650983 +0.065051 0.0650038 0.0649565 0.0649093 0.064862 0.0648148 0.0647676 +0.0647204 0.0646733 0.0646261 0.064579 0.0645318 0.0644847 0.0644377 +0.0643906 0.0643435 0.0642965 0.0642495 0.0642025 0.0641555 0.0641085 +0.0640615 0.0640146 0.0639677 0.0639207 0.0638738 0.063827 0.0637801 +0.0637333 0.0636864 0.0636396 0.0635928 0.063546 0.0634993 0.0634525 +0.0634058 0.0633591 0.0633124 0.0632657 0.063219 0.0631723 0.0631257 +0.0630791 0.0630325 0.0629859 0.0629393 0.0628927 0.0628462 0.0627997 +0.0627532 0.0627067 0.0626602 0.0626137 0.0625673 0.0625209 0.0624744 +0.062428 0.0623817 0.0623353 0.0622889 0.0622426 0.0621963 0.06215 +0.0621037 0.0620574 0.0620112 0.061965 0.0619187 0.0618725 0.0618263 +0.0617802 0.061734 0.0616879 0.0616417 0.0615956 0.0615495 0.0615035 +0.0614574 0.0614114 0.0613653 0.0613193 0.0612733 0.0612274 0.0611814 +0.0611354 0.0610895 0.0610436 0.0609977 0.0609518 0.060906 0.0608601 +0.0608143 0.0607685 0.0607227 0.0606769 0.0606311 0.0605853 0.0605396 +0.0604939 0.0604482 0.0604025 0.0603568 0.0603112 0.0602655 0.0602199 +0.0601743 0.0601287 0.0600831 0.0600376 0.059992 0.0599465 0.059901 +0.0598555 0.05981 0.0597646 0.0597191 0.0596737 0.0596283 0.0595829 +0.0595375 0.0594921 0.0594468 0.0594014 0.0593561 0.0593108 0.0592655 +0.0592203 0.059175 0.0591298 0.0590846 0.0590394 0.0589942 0.058949 +0.0589039 0.0588587 0.0588136 0.0587685 0.0587234 0.0586783 0.0586333 +0.0585882 0.0585432 0.0584982 0.0584532 0.0584082 0.0583633 0.0583183 +0.0582734 0.0582285 0.0581836 0.0581387 0.0580939 0.058049 0.0580042 +0.0579594 0.0579146 0.0578698 0.057825 0.0577803 0.0577355 0.0576908 +0.0576461 0.0576015 0.0575568 0.0575121 0.0574675 0.0574229 0.0573783 +0.0573337 0.0572891 0.0572446 0.0572 0.0571555 0.057111 0.0570665 0.0570221 +0.0569776 0.0569332 0.0568887 0.0568443 0.0567999 0.0567556 0.0567112 +0.0566669 0.0566225 0.0565782 0.0565339 0.0564897 0.0564454 0.0564012 +0.0563569 0.0563127 0.0562685 0.0562243 0.0561802 0.056136 0.0560919 +0.0560478 0.0560037 0.0559596 0.0559156 0.0558715 0.0558275 0.0557835 +0.0557395 0.0556955 0.0556515 0.0556076 0.0555636 0.0555197 0.0554758 +0.0554319 0.0553881 0.0553442 0.0553004 0.0552566 0.0552128 0.055169 +0.0551252 0.0550815 0.0550377 0.054994 0.0549503 0.0549066 0.0548629 +0.0548193 0.0547756 0.054732 0.0546884 0.0546448 0.0546012 0.0545577 +0.0545142 0.0544706 0.0544271 0.0543836 0.0543402 0.0542967 0.0542533 +0.0542098 0.0541664 0.054123 0.0540796 0.0540363 0.0539929 0.0539496 +0.0539063 0.053863 0.0538197 0.0537765 0.0537332 0.05369 0.0536468 +0.0536036 0.0535604 0.0535172 0.0534741 0.053431 0.0533879 0.0533448 +0.0533017 0.0532586 0.0532156 0.0531725 0.0531295 0.0530865 0.0530435 +0.0530006 0.0529576 0.0529147 0.0528718 0.0528289 0.052786 0.0527431 +0.0527003 0.0526574 0.0526146 0.0525718 0.052529 0.0524862 0.0524435 +0.0524008 0.052358 0.0523153 0.0522727 0.05223 0.0521873 0.0521447 +0.0521021 0.0520595 0.0520169 0.0519743 0.0519318 0.0518892 0.0518467 +0.0518042 0.0517617 0.0517192 0.0516768 0.0516343 0.0515919 0.0515495 +0.0515071 0.0514647 0.0514224 0.05138 0.0513377 0.0512954 0.0512531 +0.0512108 0.0511686 0.0511263 0.0510841 0.0510419 0.0509997 0.0509575 +0.0509154 0.0508732 0.0508311 0.050789 0.0507469 0.0507048 0.0506628 +0.0506207 0.0505787 0.0505367 0.0504947 0.0504527 0.0504108 0.0503688 +0.0503269 0.050285 0.0502431 0.0502012 0.0501593 0.0501175 0.0500757 +0.0500338 0.0499921 0.0499503 0.0499085 0.0498668 0.049825 0.0497833 +0.0497416 0.0496999 0.0496583 0.0496166 0.049575 0.0495334 0.0494918 +0.0494502 0.0494087 0.0493671 0.0493256 0.0492841 0.0492426 0.0492011 +0.0491596 0.0491182 0.0490767 0.0490353 0.0489939 0.0489525 0.0489112 +0.0488698 0.0488285 0.0487872 0.0487459 0.0487046 0.0486633 0.0486221 +0.0485809 0.0485396 0.0484984 0.0484573 0.0484161 0.0483749 0.0483338 +0.0482927 0.0482516 0.0482105 0.0481695 0.0481284 0.0480874 0.0480464 +0.0480054 0.0479644 0.0479234 0.0478825 0.0478415 0.0478006 0.0477597 +0.0477188 0.047678 0.0476371 0.0475963 0.0475555 0.0475147 0.0474739 +0.0474331 0.0473924 0.0473516 0.0473109 0.0472702 0.0472295 0.0471889 +0.0471482 0.0471076 0.047067 0.0470264 0.0469858 0.0469452 0.0469046 +0.0468641 0.0468236 0.0467831 0.0467426 0.0467021 0.0466617 0.0466213 +0.0465808 0.0465404 0.0465001 0.0464597 0.0464193 0.046379 0.0463387 +0.0462984 0.0462581 0.0462178 0.0461776 0.0461374 0.0460971 0.0460569 +0.0460168 0.0459766 0.0459364 0.0458963 0.0458562 0.0458161 0.045776 +0.0457359 0.0456959 0.0456559 0.0456158 0.0455758 0.0455359 0.0454959 +0.0454559 0.045416 0.0453761 0.0453362 0.0452963 0.0452564 0.0452166 +0.0451768 0.0451369 0.0450971 0.0450574 0.0450176 0.0449778 0.0449381 +0.0448984 0.0448587 0.044819 0.0447794 0.0447397 0.0447001 0.0446605 +0.0446209 0.0445813 0.0445417 0.0445022 0.0444626 0.0444231 0.0443836 +0.0443441 0.0443047 0.0442652 0.0442258 0.0441864 0.044147 0.0441076 +0.0440682 0.0440289 0.0439896 0.0439502 0.043911 0.0438717 0.0438324 +0.0437932 0.0437539 0.0437147 0.0436755 0.0436363 0.0435972 0.043558 +0.0435189 0.0434798 0.0434407 0.0434016 0.0433626 0.0433235 0.0432845 +0.0432455 0.0432065 0.0431675 0.0431285 0.0430896 0.0430507 0.0430118 +0.0429729 0.042934 0.0428951 0.0428563 0.0428175 0.0427786 0.0427398 +0.0427011 0.0426623 0.0426236 0.0425848 0.0425461 0.0425074 0.0424688 +0.0424301 0.0423915 0.0423528 0.0423142 0.0422756 0.0422371 0.0421985 +0.04216 0.0421214 0.0420829 0.0420444 0.042006 0.0419675 0.0419291 +0.0418907 0.0418522 0.0418139 0.0417755 0.0417371 0.0416988 0.0416605 +0.0416222 0.0415839 0.0415456 0.0415074 0.0414691 0.0414309 0.0413927 +0.0413545 0.0413163 0.0412782 0.04124 0.0412019 0.0411638 0.0411257 +0.0410877 0.0410496 0.0410116 0.0409736 0.0409356 0.0408976 0.0408596 +0.0408217 0.0407837 0.0407458 0.0407079 0.04067 0.0406322 0.0405943 +0.0405565 0.0405187 0.0404809 0.0404431 0.0404053 0.0403676 0.0403298 +0.0402921 0.0402544 0.0402167 0.0401791 0.0401414 0.0401038 0.0400662 +0.0400286 0.039991 0.0399534 0.0399159 0.0398784 0.0398409 0.0398034 +0.0397659 0.0397284 0.039691 0.0396536 0.0396161 0.0395788 0.0395414 +0.039504 0.0394667 0.0394294 0.039392 0.0393548 0.0393175 0.0392802 +0.039243 0.0392058 0.0391686 0.0391314 0.0390942 0.039057 0.0390199 +0.0389828 0.0389457 0.0389086 0.0388715 0.0388345 0.0387974 0.0387604 +0.0387234 0.0386864 0.0386494 0.0386125 0.0385755 0.0385386 0.0385017 +0.0384648 0.038428 0.0383911 0.0383543 0.0383175 0.0382807 0.0382439 +0.0382071 0.0381704 0.0381336 0.0380969 0.0380602 0.0380236 0.0379869 +0.0379502 0.0379136 0.037877 0.0378404 0.0378038 0.0377673 0.0377307 +0.0376942 0.0376577 0.0376212 0.0375847 0.0375482 0.0375118 0.0374754 +0.037439 0.0374026 0.0373662 0.0373298 0.0372935 0.0372572 0.0372209 +0.0371846 0.0371483 0.0371121 0.0370758 0.0370396 0.0370034 0.0369672 +0.036931 0.0368949 0.0368587 0.0368226 0.0367865 0.0367504 0.0367144 +0.0366783 0.0366423 0.0366063 0.0365703 0.0365343 0.0364983 0.0364624 +0.0364264 0.0363905 0.0363546 0.0363187 0.0362829 0.036247 0.0362112 +0.0361754 0.0361396 0.0361038 0.036068 0.0360323 0.0359966 0.0359609 +0.0359252 0.0358895 0.0358538 0.0358182 0.0357826 0.035747 0.0357114 +0.0356758 0.0356402 0.0356047 0.0355692 0.0355337 0.0354982 0.0354627 +0.0354273 0.0353918 0.0353564 0.035321 0.0352856 0.0352502 0.0352149 +0.0351796 0.0351442 0.0351089 0.0350736 0.0350384 0.0350031 0.0349679 +0.0349327 0.0348975 0.0348623 0.0348271 0.034792 0.0347569 0.0347218 +0.0346867 0.0346516 0.0346165 0.0345815 0.0345464 0.0345114 0.0344764 +0.0344415 0.0344065 0.0343716 0.0343366 0.0343017 0.0342668 0.034232 +0.0341971 0.0341623 0.0341275 0.0340927 0.0340579 0.0340231 0.0339883 +0.0339536 0.0339189 0.0338842 0.0338495 0.0338148 0.0337802 0.0337456 +0.0337109 0.0336763 0.0336418 0.0336072 0.0335726 0.0335381 0.0335036 +0.0334691 0.0334346 0.0334002 0.0333657 0.0333313 0.0332969 0.0332625 +0.0332281 0.0331938 0.0331594 0.0331251 0.0330908 0.0330565 0.0330222 +0.032988 0.0329537 0.0329195 0.0328853 0.0328511 0.0328169 0.0327828 +0.0327487 0.0327145 0.0326804 0.0326464 0.0326123 0.0325782 0.0325442 +0.0325102 0.0324762 0.0324422 0.0324082 0.0323743 0.0323404 0.0323065 +0.0322726 0.0322387 0.0322048 0.032171 0.0321372 0.0321033 0.0320696 +0.0320358 0.032002 0.0319683 0.0319346 0.0319009 0.0318672 0.0318335 +0.0317998 0.0317662 0.0317326 0.031699 0.0316654 0.0316318 0.0315983 +0.0315647 0.0315312 0.0314977 0.0314642 0.0314308 0.0313973 0.0313639 +0.0313305 0.0312971 0.0312637 0.0312304 0.031197 0.0311637 0.0311304 +0.0310971 0.0310638 0.0310306 0.0309973 0.0309641 0.0309309 0.0308977 +0.0308645 0.0308314 0.0307982 0.0307651 0.030732 0.0306989 0.0306659 +0.0306328 0.0305998 0.0305668 0.0305338 0.0305008 0.0304678 0.0304349 +0.0304019 0.030369 0.0303361 0.0303032 0.0302704 0.0302375 0.0302047 +0.0301719 0.0301391 0.0301063 0.0300736 0.0300408 0.0300081 0.0299754 +0.0299427 0.0299101 0.0298774 0.0298448 0.0298122 0.0297795 0.029747 +0.0297144 0.0296818 0.0296493 0.0296168 0.0295843 0.0295518 0.0295194 +0.0294869 0.0294545 0.0294221 0.0293897 0.0293573 0.0293249 0.0292926 +0.0292603 0.029228 0.0291957 0.0291634 0.0291311 0.0290989 0.0290667 +0.0290345 0.0290023 0.0289701 0.028938 0.0289058 0.0288737 0.0288416 +0.0288095 0.0287775 0.0287454 0.0287134 0.0286814 0.0286494 0.0286174 +0.0285855 0.0285535 0.0285216 0.0284897; +#A 31000 0.0284578 0.0284259 0.028394 0.0283622 0.0283304 0.0282986 +0.0282668 0.028235 0.0282033 0.0281715 0.0281398 0.0281081 0.0280764 +0.0280448 0.0280131 0.0279815 0.0279499 0.0279183 0.0278867 0.0278551 +0.0278236 0.0277921 0.0277606 0.0277291 0.0276976 0.0276661 0.0276347 +0.0276033 0.0275719 0.0275405 0.0275091 0.0274777 0.0274464 0.0274151 +0.0273838 0.0273525 0.0273212 0.02729 0.0272588 0.0272275 0.0271963 +0.0271652 0.027134 0.0271028 0.0270717 0.0270406 0.0270095 0.0269784 +0.0269474 0.0269163 0.0268853 0.0268543 0.0268233 0.0267924 0.0267614 +0.0267305 0.0266995 0.0266686 0.0266378 0.0266069 0.026576 0.0265452 +0.0265144 0.0264836 0.0264528 0.0264221 0.0263913 0.0263606 0.0263299 +0.0262992 0.0262685 0.0262378 0.0262072 0.0261766 0.026146 0.0261154 +0.0260848 0.0260543 0.0260237 0.0259932 0.0259627 0.0259322 0.0259018 +0.0258713 0.0258409 0.0258105 0.0257801 0.0257497 0.0257193 0.025689 +0.0256587 0.0256283 0.0255981 0.0255678 0.0255375 0.0255073 0.0254771 +0.0254469 0.0254167 0.0253865 0.0253563 0.0253262 0.0252961 0.025266 +0.0252359 0.0252058 0.0251758 0.0251458 0.0251158 0.0250858 0.0250558 +0.0250258 0.0249959 0.024966 0.024936 0.0249062 0.0248763 0.0248464 +0.0248166 0.0247868 0.024757 0.0247272 0.0246974 0.0246677 0.0246379 +0.0246082 0.0245785 0.0245488 0.0245192 0.0244895 0.0244599 0.0244303 +0.0244007 0.0243711 0.0243416 0.024312 0.0242825 0.024253 0.0242235 +0.024194 0.0241646 0.0241351 0.0241057 0.0240763 0.0240469 0.0240176 +0.0239882 0.0239589 0.0239296 0.0239003 0.023871 0.0238417 0.0238125 +0.0237833 0.0237541 0.0237249 0.0236957 0.0236665 0.0236374 0.0236083 +0.0235792 0.0235501 0.023521 0.023492 0.0234629 0.0234339 0.0234049 +0.0233759 0.023347 0.023318 0.0232891 0.0232602 0.0232313 0.0232024 +0.0231736 0.0231447 0.0231159 0.0230871 0.0230583 0.0230295 0.0230008 +0.0229721 0.0229433 0.0229146 0.022886 0.0228573 0.0228286 0.0228 0.0227714 +0.0227428 0.0227142 0.0226857 0.0226571 0.0226286 0.0226001 0.0225716 +0.0225431 0.0225147 0.0224862 0.0224578 0.0224294 0.022401 0.0223727 +0.0223443 0.022316 0.0222877 0.0222594 0.0222311 0.0222028 0.0221746 +0.0221464 0.0221182 0.02209 0.0220618 0.0220336 0.0220055 0.0219774 +0.0219493 0.0219212 0.0218931 0.0218651 0.021837 0.021809 0.021781 +0.021753 0.0217251 0.0216971 0.0216692 0.0216413 0.0216134 0.0215855 +0.0215577 0.0215298 0.021502 0.0214742 0.0214464 0.0214186 0.0213909 +0.0213632 0.0213354 0.0213077 0.0212801 0.0212524 0.0212248 0.0211971 +0.0211695 0.0211419 0.0211144 0.0210868 0.0210593 0.0210317 0.0210042 +0.0209767 0.0209493 0.0209218 0.0208944 0.020867 0.0208396 0.0208122 +0.0207848 0.0207575 0.0207301 0.0207028 0.0206755 0.0206483 0.020621 +0.0205938 0.0205665 0.0205393 0.0205121 0.020485 0.0204578 0.0204307 +0.0204036 0.0203765 0.0203494 0.0203223 0.0202953 0.0202682 0.0202412 +0.0202142 0.0201873 0.0201603 0.0201334 0.0201064 0.0200795 0.0200527 +0.0200258 0.0199989 0.0199721 0.0199453 0.0199185 0.0198917 0.0198649 +0.0198382 0.0198115 0.0197847 0.019758 0.0197314 0.0197047 0.0196781 +0.0196514 0.0196248 0.0195983 0.0195717 0.0195451 0.0195186 0.0194921 +0.0194656 0.0194391 0.0194126 0.0193862 0.0193598 0.0193333 0.019307 +0.0192806 0.0192542 0.0192279 0.0192016 0.0191753 0.019149 0.0191227 +0.0190964 0.0190702 0.019044 0.0190178 0.0189916 0.0189654 0.0189393 +0.0189132 0.0188871 0.018861 0.0188349 0.0188088 0.0187828 0.0187568 +0.0187308 0.0187048 0.0186788 0.0186529 0.0186269 0.018601 0.0185751 +0.0185492 0.0185234 0.0184975 0.0184717 0.0184459 0.0184201 0.0183943 +0.0183686 0.0183428 0.0183171 0.0182914 0.0182657 0.01824 0.0182144 +0.0181888 0.0181631 0.0181375 0.018112 0.0180864 0.0180609 0.0180353 +0.0180098 0.0179843 0.0179589 0.0179334 0.017908 0.0178825 0.0178571 +0.0178318 0.0178064 0.017781 0.0177557 0.0177304 0.0177051 0.0176798 +0.0176546 0.0176293 0.0176041 0.0175789 0.0175537 0.0175285 0.0175034 +0.0174782 0.0174531 0.017428 0.0174029 0.0173779 0.0173528 0.0173278 +0.0173028 0.0172778 0.0172528 0.0172278 0.0172029 0.017178 0.0171531 +0.0171282 0.0171033 0.0170785 0.0170536 0.0170288 0.017004 0.0169792 +0.0169545 0.0169297 0.016905 0.0168803 0.0168556 0.0168309 0.0168063 +0.0167816 0.016757 0.0167324 0.0167078 0.0166832 0.0166587 0.0166342 +0.0166096 0.0165851 0.0165607 0.0165362 0.0165118 0.0164873 0.0164629 +0.0164385 0.0164142 0.0163898 0.0163655 0.0163412 0.0163169 0.0162926 +0.0162683 0.0162441 0.0162198 0.0161956 0.0161714 0.0161472 0.0161231 +0.0160989 0.0160748 0.0160507 0.0160266 0.0160026 0.0159785 0.0159545 +0.0159304 0.0159064 0.0158825 0.0158585 0.0158346 0.0158106 0.0157867 +0.0157628 0.015739 0.0157151 0.0156913 0.0156674 0.0156436 0.0156198 +0.0155961 0.0155723 0.0155486 0.0155249 0.0155012 0.0154775 0.0154538 +0.0154302 0.0154066 0.015383 0.0153594 0.0153358 0.0153123 0.0152887 +0.0152652 0.0152417 0.0152182 0.0151948 0.0151713 0.0151479 0.0151245 +0.0151011 0.0150777 0.0150543 0.015031 0.0150077 0.0149844 0.0149611 +0.0149378 0.0149146 0.0148913 0.0148681 0.0148449 0.0148217 0.0147986 +0.0147754 0.0147523 0.0147292 0.0147061 0.014683 0.01466 0.0146369 +0.0146139 0.0145909 0.0145679 0.014545 0.014522 0.0144991 0.0144762 +0.0144533 0.0144304 0.0144076 0.0143847 0.0143619 0.0143391 0.0143163 +0.0142935 0.0142708 0.0142481 0.0142253 0.0142026 0.01418 0.0141573 +0.0141347 0.014112 0.0140894 0.0140668 0.0140443 0.0140217 0.0139992 +0.0139766 0.0139541 0.0139317 0.0139092 0.0138868 0.0138643 0.0138419 +0.0138195 0.0137971 0.0137748 0.0137524 0.0137301 0.0137078 0.0136855 +0.0136633 0.013641 0.0136188 0.0135966 0.0135744 0.0135522 0.01353 +0.0135079 0.0134858 0.0134636 0.0134416 0.0134195 0.0133974 0.0133754 +0.0133534 0.0133314 0.0133094 0.0132874 0.0132655 0.0132436 0.0132216 +0.0131998 0.0131779 0.013156 0.0131342 0.0131124 0.0130906 0.0130688 +0.013047 0.0130253 0.0130035 0.0129818 0.0129601 0.0129384 0.0129168 +0.0128951 0.0128735 0.0128519 0.0128303 0.0128087 0.0127872 0.0127657 +0.0127441 0.0127226 0.0127012 0.0126797 0.0126582 0.0126368 0.0126154 +0.012594 0.0125726 0.0125513 0.0125299 0.0125086 0.0124873 0.012466 +0.0124448 0.0124235 0.0124023 0.0123811 0.0123599 0.0123387 0.0123176 +0.0122964 0.0122753 0.0122542 0.0122331 0.012212 0.012191 0.0121699 +0.0121489 0.0121279 0.012107 0.012086 0.0120651 0.0120441 0.0120232 +0.0120023 0.0119815 0.0119606 0.0119398 0.011919 0.0118982 0.0118774 +0.0118566 0.0118359 0.0118151 0.0117944 0.0117737 0.0117531 0.0117324 +0.0117118 0.0116911 0.0116705 0.01165 0.0116294 0.0116088 0.0115883 +0.0115678 0.0115473 0.0115268 0.0115064 0.0114859 0.0114655 0.0114451 +0.0114247 0.0114043 0.011384 0.0113637 0.0113433 0.011323 0.0113028 +0.0112825 0.0112623 0.011242 0.0112218 0.0112016 0.0111815 0.0111613 +0.0111412 0.0111211 0.011101 0.0110809 0.0110608 0.0110408 0.0110208 +0.0110007 0.0109808 0.0109608 0.0109408 0.0109209 0.010901 0.0108811 +0.0108612 0.0108413 0.0108215 0.0108016 0.0107818 0.010762 0.0107423 +0.0107225 0.0107028 0.010683 0.0106633 0.0106436 0.010624 0.0106043 +0.0105847 0.0105651 0.0105455 0.0105259 0.0105064 0.0104868 0.0104673 +0.0104478 0.0104283 0.0104088 0.0103894 0.0103699 0.0103505 0.0103311 +0.0103117 0.0102924 0.010273 0.0102537 0.0102344 0.0102151 0.0101958 +0.0101766 0.0101574 0.0101381 0.0101189 0.0100998 0.0100806 0.0100614 +0.0100423 0.0100232 0.0100041 0.00998505 0.00996599 0.00994695 0.00992793 +0.00990893 0.00988995 0.00987098 0.00985204 0.00983311 0.0098142 0.0097953 +0.00977643 0.00975757 0.00973873 0.00971991 0.00970111 0.00968232 0.00966355 +0.0096448 0.00962607 0.00960736 0.00958866 0.00956999 0.00955133 0.00953269 +0.00951406 0.00949546 0.00947687 0.0094583 0.00943975 0.00942122 0.00940271 +0.00938421 0.00936573 0.00934727 0.00932883 0.0093104 0.009292 0.00927361 +0.00925524 0.00923689 0.00921855 0.00920023 0.00918194 0.00916366 0.00914539 +0.00912715 0.00910892 0.00909072 0.00907253 0.00905436 0.0090362 0.00901807 +0.00899995 0.00898185 0.00896377 0.0089457 0.00892766 0.00890963 0.00889162 +0.00887363 0.00885566 0.0088377 0.00881976 0.00880184 0.00878394 0.00876606 +0.0087482 0.00873035 0.00871252 0.00869471 0.00867692 0.00865914 0.00864139 +0.00862365 0.00860593 0.00858822 0.00857054 0.00855287 0.00853523 0.0085176 +0.00849998 0.00848239 0.00846481 0.00844726 0.00842972 0.0084122 0.00839469 +0.00837721 0.00835974 0.00834229 0.00832486 0.00830744 0.00829005 0.00827267 +0.00825531 0.00823797 0.00822065 0.00820335 0.00818606 0.00816879 0.00815154 +0.00813431 0.00811709 0.0080999 0.00808272 0.00806556 0.00804842 0.00803129 +0.00801419 0.0079971 0.00798003 0.00796298 0.00794595 0.00792893 0.00791193 +0.00789495 0.00787799 0.00786105 0.00784412 0.00782722 0.00781033 0.00779346 +0.00777661 0.00775977 0.00774296 0.00772616 0.00770938 0.00769262 0.00767587 +0.00765915 0.00764244 0.00762575 0.00760908 0.00759242 0.00757579 0.00755917 +0.00754257 0.00752599 0.00750943 0.00749288 0.00747636 0.00745985 0.00744336 +0.00742689 0.00741043 0.007394 0.00737758 0.00736118 0.0073448 0.00732843 +0.00731209 0.00729576 0.00727945 0.00726316 0.00724689 0.00723063 0.0072144 +0.00719818 0.00718198 0.00716579 0.00714963 0.00713348 0.00711736 0.00710125 +0.00708515 0.00706908 0.00705302 0.00703699 0.00702097 0.00700497 0.00698898 +0.00697302 0.00695707 0.00694114 0.00692523 0.00690934 0.00689347 0.00687761 +0.00686177 0.00684595 0.00683015 0.00681437 0.0067986 0.00678285 0.00676712 +0.00675141 0.00673572 0.00672004 0.00670439 0.00668875 0.00667313 0.00665753 +0.00664194 0.00662638 0.00661083 0.0065953 0.00657979 0.00656429 0.00654882 +0.00653336 0.00651792 0.0065025 0.0064871 0.00647171 0.00645635 0.006441 +0.00642567 0.00641036 0.00639506 0.00637979 0.00636453 0.00634929 0.00633407 +0.00631887 0.00630368 0.00628851 0.00627337 0.00625824 0.00624312 0.00622803 +0.00621295 0.0061979 0.00618286 0.00616783 0.00615283 0.00613785 0.00612288 +0.00610793 0.006093 0.00607809 0.00606319 0.00604832 0.00603346 0.00601862 +0.0060038 0.00598899 0.00597421 0.00595944 0.00594469 0.00592996 0.00591525 +0.00590055 0.00588587 0.00587122 0.00585658 0.00584195 0.00582735 0.00581276 +0.0057982 0.00578365 0.00576912 0.0057546 0.00574011 0.00572563 0.00571117 +0.00569673 0.00568231 0.00566791 0.00565352 0.00563915 0.0056248 0.00561047 +0.00559616 0.00558187 0.00556759 0.00555333 0.00553909 0.00552487 0.00551066 +0.00549648 0.00548231 0.00546816 0.00545403 0.00543992 0.00542582; +#A 32000 0.00541175 0.00539769 0.00538365 0.00536962 0.00535562 0.00534163 +0.00532767 0.00531372 0.00529979 0.00528587 0.00527198 0.0052581 0.00524424 +0.0052304 0.00521658 0.00520278 0.00518899 0.00517522 0.00516147 0.00514774 +0.00513403 0.00512034 0.00510666 0.005093 0.00507936 0.00506574 0.00505214 +0.00503855 0.00502498 0.00501143 0.0049979 0.00498439 0.00497089 0.00495742 +0.00494396 0.00493052 0.0049171 0.0049037 0.00489031 0.00487694 0.00486359 +0.00485026 0.00483695 0.00482366 0.00481038 0.00479712 0.00478388 0.00477066 +0.00475746 0.00474427 0.00473111 0.00471796 0.00470483 0.00469171 0.00467862 +0.00466554 0.00465249 0.00463945 0.00462643 0.00461342 0.00460044 0.00458747 +0.00457452 0.00456159 0.00454868 0.00453579 0.00452291 0.00451006 0.00449722 +0.0044844 0.00447159 0.00445881 0.00444604 0.0044333 0.00442057 0.00440785 +0.00439516 0.00438249 0.00436983 0.00435719 0.00434457 0.00433197 0.00431938 +0.00430682 0.00429427 0.00428174 0.00426923 0.00425674 0.00424426 0.00423181 +0.00421937 0.00420695 0.00419455 0.00418216 0.0041698 0.00415745 0.00414512 +0.00413281 0.00412052 0.00410825 0.00409599 0.00408375 0.00407153 0.00405933 +0.00404715 0.00403499 0.00402284 0.00401071 0.0039986 0.00398651 0.00397444 +0.00396238 0.00395034 0.00393832 0.00392632 0.00391434 0.00390238 0.00389043 +0.0038785 0.0038666 0.0038547 0.00384283 0.00383098 0.00381914 0.00380732 +0.00379552 0.00378374 0.00377198 0.00376023 0.00374851 0.0037368 0.00372511 +0.00371343 0.00370178 0.00369015 0.00367853 0.00366693 0.00365535 0.00364379 +0.00363224 0.00362071 0.00360921 0.00359772 0.00358625 0.00357479 0.00356336 +0.00355194 0.00354054 0.00352916 0.0035178 0.00350646 0.00349513 0.00348382 +0.00347254 0.00346127 0.00345001 0.00343878 0.00342756 0.00341637 0.00340519 +0.00339403 0.00338288 0.00337176 0.00336065 0.00334956 0.00333849 0.00332744 +0.00331641 0.00330539 0.0032944 0.00328342 0.00327246 0.00326152 0.00325059 +0.00323969 0.0032288 0.00321793 0.00320708 0.00319625 0.00318544 0.00317464 +0.00316386 0.0031531 0.00314236 0.00313164 0.00312093 0.00311025 0.00309958 +0.00308893 0.0030783 0.00306769 0.00305709 0.00304651 0.00303596 0.00302542 +0.00301489 0.00300439 0.00299391 0.00298344 0.00297299 0.00296256 0.00295215 +0.00294175 0.00293138 0.00292102 0.00291068 0.00290036 0.00289006 0.00287978 +0.00286951 0.00285926 0.00284903 0.00283882 0.00282863 0.00281845 0.0028083 +0.00279816 0.00278804 0.00277794 0.00276786 0.00275779 0.00274774 0.00273772 +0.00272771 0.00271771 0.00270774 0.00269779 0.00268785 0.00267793 0.00266803 +0.00265815 0.00264828 0.00263844 0.00262861 0.0026188 0.00260901 0.00259924 +0.00258949 0.00257975 0.00257003 0.00256033 0.00255065 0.00254099 0.00253135 +0.00252172 0.00251211 0.00250252 0.00249295 0.0024834 0.00247387 0.00246435 +0.00245485 0.00244537 0.00243591 0.00242647 0.00241704 0.00240764 0.00239825 +0.00238888 0.00237953 0.00237019 0.00236088 0.00235158 0.0023423 0.00233304 +0.0023238 0.00231458 0.00230537 0.00229619 0.00228702 0.00227787 0.00226874 +0.00225962 0.00225053 0.00224145 0.00223239 0.00222335 0.00221433 0.00220532 +0.00219634 0.00218737 0.00217842 0.00216949 0.00216058 0.00215169 0.00214281 +0.00213395 0.00212511 0.00211629 0.00210749 0.00209871 0.00208994 0.00208119 +0.00207246 0.00206375 0.00205506 0.00204639 0.00203773 0.00202909 0.00202047 +0.00201187 0.00200329 0.00199472 0.00198618 0.00197765 0.00196914 0.00196065 +0.00195218 0.00194372 0.00193528 0.00192687 0.00191847 0.00191009 0.00190172 +0.00189338 0.00188505 0.00187674 0.00186845 0.00186018 0.00185193 0.00184369 +0.00183548 0.00182728 0.0018191 0.00181094 0.00180279 0.00179467 0.00178656 +0.00177847 0.0017704 0.00176235 0.00175432 0.0017463 0.00173831 0.00173033 +0.00172237 0.00171443 0.0017065 0.0016986 0.00169071 0.00168284 0.00167499 +0.00166716 0.00165935 0.00165155 0.00164378 0.00163602 0.00162828 0.00162055 +0.00161285 0.00160517 0.0015975 0.00158985 0.00158222 0.00157461 0.00156701 +0.00155944 0.00155188 0.00154434 0.00153682 0.00152932 0.00152184 0.00151437 +0.00150693 0.0014995 0.00149209 0.00148469 0.00147732 0.00146996 0.00146263 +0.00145531 0.00144801 0.00144073 0.00143346 0.00142622 0.00141899 0.00141178 +0.00140459 0.00139742 0.00139027 0.00138313 0.00137601 0.00136891 0.00136183 +0.00135477 0.00134773 0.0013407 0.0013337 0.00132671 0.00131974 0.00131278 +0.00130585 0.00129894 0.00129204 0.00128516 0.0012783 0.00127146 0.00126463 +0.00125783 0.00125104 0.00124427 0.00123752 0.00123079 0.00122408 0.00121738 +0.0012107 0.00120404 0.0011974 0.00119078 0.00118418 0.00117759 0.00117103 +0.00116448 0.00115795 0.00115144 0.00114494 0.00113847 0.00113201 0.00112557 +0.00111915 0.00111275 0.00110637 0.0011 0.00109365 0.00108732 0.00108101 +0.00107472 0.00106845 0.00106219 0.00105596 0.00104974 0.00104354 0.00103736 +0.00103119 0.00102505 0.00101892 0.00101281 0.00100672 0.00100065 0.000994598 +0.000988563 0.000982546 0.000976548 0.000970568 0.000964607 0.000958663 +0.000952738 0.000946832 0.000940944 0.000935074 0.000929222 0.000923389 +0.000917574 0.000911778 0.000906 0.00090024 0.000894498 0.000888775 +0.000883071 0.000877384 0.000871716 0.000866066 0.000860435 0.000854822 +0.000849228 0.000843651 0.000838093 0.000832554 0.000827033 0.00082153 +0.000816045 0.000810579 0.000805131 0.000799702 0.000794291 0.000788898 +0.000783524 0.000778168 0.00077283 0.000767511 0.00076221 0.000756927 +0.000751663 0.000746417 0.000741189 0.00073598 0.000730789 0.000725617 +0.000720463 0.000715327 0.00071021 0.000705111 0.00070003 0.000694968 +0.000689924 0.000684898 0.000679891 0.000674902 0.000669931 0.000664979 +0.000660046 0.00065513 0.000650233 0.000645354 0.000640494 0.000635652 +0.000630828 0.000626023 0.000621236 0.000616467 0.000611717 0.000606985 +0.000602272 0.000597577 0.0005929 0.000588242 0.000583602 0.00057898 +0.000574377 0.000569792 0.000565225 0.000560677 0.000556147 0.000551635 +0.000547142 0.000542668 0.000538211 0.000533773 0.000529353 0.000524952 +0.000520569 0.000516205 0.000511858 0.00050753 0.000503221 0.00049893 +0.000494657 0.000490403 0.000486167 0.000481949 0.00047775 0.000473569 +0.000469406 0.000465262 0.000461136 0.000457029 0.00045294 0.000448869 +0.000444816 0.000440782 0.000436767 0.00043277 0.000428791 0.00042483 +0.000420888 0.000416964 0.000413059 0.000409172 0.000405303 0.000401453 +0.000397621 0.000393807 0.000390012 0.000386235 0.000382477 0.000378736 +0.000375015 0.000371311 0.000367626 0.00036396 0.000360311 0.000356682 +0.00035307 0.000349477 0.000345902 0.000342346 0.000338808 0.000335288 +0.000331787 0.000328304 0.000324839 0.000321393 0.000317965 0.000314556 +0.000311165 0.000307792 0.000304438 0.000301102 0.000297784 0.000294485 +0.000291204 0.000287942 0.000284698 0.000281472 0.000278265 0.000275076 +0.000271905 0.000268753 0.000265619 0.000262504 0.000259407 0.000256328 +0.000253267 0.000250225 0.000247202 0.000244197 0.00024121 0.000238241 +0.000235291 0.00023236 0.000229446 0.000226551 0.000223675 0.000220816 +0.000217977 0.000215155 0.000212352 0.000209567 0.000206801 0.000204053 +0.000201323 0.000198612 0.000195919 0.000193245 0.000190589 0.000187951 +0.000185332 0.000182731 0.000180148 0.000177584 0.000175038 0.000172511 +0.000170002 0.000167511 0.000165039 0.000162585 0.000160149 0.000157732 +0.000155333 0.000152953 0.000150591 0.000148247 0.000145922 0.000143615 +0.000141326 0.000139056 0.000136804 0.000134571 0.000132356 0.000130159 +0.000127981 0.000125821 0.00012368 0.000121556 0.000119452 0.000117365 +0.000115297 0.000113248 0.000111216 0.000109204 0.000107209 0.000105233 +0.000103275 0.000101336 9.94151e-05 9.75125e-05 9.56283e-05 9.37625e-05 +9.1915e-05 9.0086e-05 8.82753e-05 8.6483e-05 8.47091e-05 8.29536e-05 +8.12164e-05 7.94976e-05 7.77973e-05 7.61152e-05 7.44516e-05 7.28064e-05 +7.11795e-05 6.9571e-05 6.79809e-05 6.64092e-05 6.48558e-05 6.33209e-05 +6.18043e-05 6.03061e-05 5.88263e-05 5.73648e-05 5.59218e-05 5.44971e-05 +5.30908e-05 5.17029e-05 5.03334e-05 4.89822e-05 4.76495e-05 4.63351e-05 +4.50391e-05 4.37615e-05 4.25022e-05 4.12614e-05 4.00389e-05 3.88348e-05 +3.76491e-05 3.64818e-05 3.53328e-05 3.42022e-05 3.30901e-05 3.19963e-05 +3.09208e-05 2.98638e-05 2.88252e-05 2.78049e-05 2.6803e-05 2.58195e-05 +2.48544e-05 2.39076e-05 2.29793e-05 2.20693e-05 2.11777e-05 2.03045e-05 +1.94497e-05 1.86132e-05 1.77952e-05 1.69955e-05 1.62142e-05 1.54513e-05 +1.47068e-05 1.39806e-05 1.32729e-05 1.25835e-05 1.19125e-05 1.12599e-05 +1.06257e-05 1.00098e-05 9.41236e-06 8.83328e-06 8.27258e-06 7.73027e-06 +7.20634e-06 6.7008e-06 6.21363e-06 5.74485e-06 5.29446e-06 4.86245e-06 +4.44882e-06 4.05357e-06 3.67671e-06 3.31823e-06 2.97814e-06 2.65642e-06 +2.3531e-06 2.06815e-06 1.80159e-06 1.55341e-06 1.32362e-06 1.11221e-06 +9.19178e-07 7.44534e-07 5.88274e-07 4.50397e-07 3.30904e-07 2.29795e-07 +1.47069e-07 8.27261e-08 3.67671e-08 9.19178e-09; +#X coords 0 1 32767 -1 200 140 1; +#X restore 431 29 graph; +#X obj 25 156 function~ gsf_window; +#X msg 25 133 rcos; +#N canvas 10 37 581 367 sprayclouds 0; +#X obj 9 231 outlet; +#X msg 9 153 spray; +#X obj 116 108 metro 1000; +#X obj 116 87 tgl 15 0 empty dac-toggle empty 0 -6 0 8 -262144 -1 -1 +0 1; +#X floatatom 9 65 5 0 0 0 - - -, f 5; +#X msg 116 155 pitchspray; +#X msg 9 32 1; +#X obj 9 12 loadbang; +#X msg 47 33 2; +#X obj 116 63 r dac-toggle; +#X text 77 35 <- select cloud method (1=spray \, 2=pitchspray); +#X text 197 108 <- time interval is the cloud horizon (also latency) +; +#X text 196 158 <- either of these triggers a "cloud" of grains; +#N canvas 666 199 458 308 select-method 0; +#X obj 64 35 inlet; +#X obj 138 25 inlet; +#X obj 26 13 loadbang; +#X obj 138 223 spigot; +#X obj 193 224 spigot; +#X obj 230 188 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 175 185 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 64 132 unpack f f; +#X obj 64 65 sel 1 2; +#X msg 64 102 1 0; +#X msg 97 102 0 1; +#X obj 138 255 outlet; +#X obj 193 254 outlet; +#X connect 0 0 8 0; +#X connect 1 0 3 0; +#X connect 1 0 4 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 12 0; +#X connect 5 0 4 1; +#X connect 6 0 3 1; +#X connect 7 0 6 0; +#X connect 7 1 5 0; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 9 0 7 0; +#X connect 10 0 7 0; +#X restore 9 131 pd select-method; +#X connect 1 0 0 0; +#X connect 2 0 13 1; +#X connect 3 0 2 0; +#X connect 4 0 13 0; +#X connect 5 0 0 0; +#X connect 6 0 4 0; +#X connect 7 0 6 0; +#X connect 8 0 4 0; +#X connect 9 0 3 0; +#X connect 13 0 1 0; +#X connect 13 1 5 0; +#X restore 25 181 pd sprayclouds; +#N canvas 0 22 454 304 amp 0; +#X obj 89 108 inlet~; +#X obj 89 149 *~; +#X obj 89 198 outlet~; +#X obj 176 110 inlet~; +#X obj 176 151 *~; +#X obj 176 200 outlet~; +#X obj 256 109 inlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 6 0 4 1; +#X connect 6 0 1 1; +#X restore 25 389 pd amp; +#X obj 223 344 hsl 128 15 0 1 0 0 empty empty gain -2 -6 0 8 -81528 +-1 -1 0 1; +#X obj 25 419 dac~; +#N canvas 0 22 450 300 (subpatch) 0; +#X array gsf_wavetable 4e+06 float 2; +#X coords 0 1 4e+06 -1 200 140 1; +#X restore 431 169 graph; +#X text 99 431 your sound here - it should be at least 20 seconds long +->; +#N canvas 181 44 551 550 grist 0; +#X obj 87 481 outlet; +#X msg 86 91 grist 25 1000 0.25 3 0.1 0.9 0.1 0.9 50 200; +#X msg 98 124 grist 2 1000 0.25 2 0.1 0.9 0.1 0.9 4000 8000; +#X text 15 41 args: events horizon min_incr max_incr minpan maxpan +minamp maxamp mindur maxdur; +#X msg 211 439 events \$1; +#X floatatom 211 416 5 0 0 0 - - -, f 5; +#X text 255 417 directly set events per "cloud"; +#X msg 108 152 grist 5 1000 1 1 0.1 0.9 0.1 0.9 1000 2000; +#X msg 120 193 grist 8 1000 0.25 3 0.1 0.9 1 1 200 200; +#X msg 133 222 grist 1 1000 1 1 0.1 0.9 0.1 0.9 1000 1000; +#X msg 148 250 grist 200 1000 0.2 4 0.1 0.9 0.1 0.9 50 80; +#X obj 86 71 loadbang; +#X msg 161 277 grist 150 1000 0.2 4 0.1 0.9 0.1 0.9 150 250; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 0 0; +#X connect 10 0 0 0; +#X connect 11 0 1 0; +#X connect 12 0 0 0; +#X restore 40 200 pd grist; +#X obj 25 107 loadbang; +#N canvas 0 22 498 348 scales 0; +#X obj 110 246 outlet; +#X text 66 43 these get used when you drive with "pitchspray"; +#X msg 38 94 setscale 1 1.25 1.5 2; +#X msg 157 156 setscale 0.5 1 2; +#X obj 38 70 loadbang; +#X msg 104 116 setscale 1 1.25 1.33333 1.5 1.875 2; +#X msg 264 220 setscale 1 1.06 1.09; +#X msg 257 185 setscale 1 1.5 2.25; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 2 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X restore 51 219 pd scales; +#N canvas 287 22 749 764 more-messages 0; +#X obj 40 615 outlet; +#X msg 40 49 nopan \$1; +#X obj 40 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X text 59 26 turn off panning effect; +#X obj 70 79 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X msg 70 103 interpolate \$1; +#X text 89 80 set interpolation (on by default); +#X obj 139 223 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X msg 139 247 steady \$1; +#X text 158 224 set steady rhythm; +#X obj 102 144 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X msg 102 168 interpolate_envelope \$1; +#X text 121 145 set envelope interpolation (off by default); +#X floatatom 147 280 5 0 0 0 - - -, f 5; +#X msg 147 302 retro_odds \$1; +#X text 186 280 odds for backwards grain (0-1); +#X floatatom 222 324 5 0 0 0 - - -, f 5; +#X msg 222 346 transpose \$1; +#X text 255 382 reseed random generator; +#X msg 216 402 seed \$1; +#X floatatom 216 384 5 0 0 0 - - -, f 5; +#X floatatom 229 428 5 0 0 0 - - -, f 5; +#X msg 229 446 pitchdev \$1; +#X text 268 426 detune factor for "pitchspray"; +#X msg 220 491 grain 3300 -1 1 0.2 15000; +#X text 219 476 specify a single grain directly:; +#X text 218 509 args: dur \, incr \, amp \, pan \, skip; +#X msg 218 541 info; +#X obj 345 309 hsl 128 15 0.1 2 0 0 empty empty transpose -2 -6 0 8 +-81528 -1 -1 0 1; +#X text 260 324 comment; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 0 0; +#X connect 7 0 8 0; +#X connect 8 0 0 0; +#X connect 10 0 11 0; +#X connect 11 0 0 0; +#X connect 13 0 14 0; +#X connect 14 0 0 0; +#X connect 16 0 17 0; +#X connect 17 0 0 0; +#X connect 19 0 0 0; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 0 0; +#X connect 24 0 0 0; +#X connect 27 0 0 0; +#X connect 28 0 16 0; +#X restore 69 261 pd more-messages; +#X text 136 181 <- triggering; +#X text 103 200 <- parameters; +#X text 125 221 <- optional tunings; +#X text 189 262 <- etc.; +#X text 25 52 granulesf~ creates granular textures by mixing together +enveloped grains taken from a soundfile stored in an array.; +#X msg 60 133 adrenv 0.05 0.1 0.3 1; +#N canvas 0 22 828 525 skiptimes 0; +#X msg 282 152 maxskip -1; +#X msg 209 151 minskip 0; +#X obj 60 385 outlet; +#X text 363 153 set to full buffer (default); +#X obj 209 124 t b b; +#X obj 209 101 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 19 31 t b b; +#X obj 19 8 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1 +; +#X text 69 15 constrain min & max skiptimes \; in this case each grain +starts (or ends) at the same time; +#X msg 263 326 minskip \$1; +#X msg 357 326 maxskip \$1; +#X obj 266 224 hsl 128 15 0 20000 0 0 empty empty skiptime -2 -6 0 +8 -81528 -1 -1 0 1; +#X obj 263 268 t f f; +#X floatatom 263 247 5 0 0 0 - - -, f 5; +#X text 403 225 slide it!; +#X floatatom 357 256 5 0 0 0 - - -, f 5; +#X obj 357 300 + 0; +#X text 398 255 optional offset; +#X msg 19 54 minskip 5000; +#X msg 120 52 maxskip 5000; +#X obj 357 274 t b f; +#X connect 0 0 2 0; +#X connect 1 0 2 0; +#X connect 4 0 1 0; +#X connect 4 1 0 0; +#X connect 5 0 4 0; +#X connect 6 0 18 0; +#X connect 6 1 19 0; +#X connect 7 0 6 0; +#X connect 9 0 2 0; +#X connect 10 0 2 0; +#X connect 11 0 13 0; +#X connect 12 0 9 0; +#X connect 12 1 16 0; +#X connect 13 0 12 0; +#X connect 15 0 20 0; +#X connect 16 0 10 0; +#X connect 18 0 2 0; +#X connect 19 0 2 0; +#X connect 20 0 16 0; +#X connect 20 1 16 1; +#X restore 60 239 pd skiptimes; +#X text 150 238 <- constrain grain selection; +#X obj 466 452 soundfiler; +#X obj 466 401 openpanel; +#X msg 466 377 bang; +#X msg 466 424 read -resize \$1 gsf_wavetable; +#X obj 23 10 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 100 113 grain envelope; +#X connect 0 0 5 0; +#X connect 0 1 5 1; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 7 0; +#X connect 5 1 7 1; +#X connect 6 0 5 2; +#X connect 10 0 0 0; +#X connect 11 0 3 0; +#X connect 12 0 0 0; +#X connect 13 0 0 0; +#X connect 19 0 2 0; +#X connect 20 0 0 0; +#X connect 23 0 25 0; +#X connect 24 0 23 0; +#X connect 25 0 22 0; diff --git a/externals/lyonpotpourri/granulesf~.c b/externals/lyonpotpourri/granulesf~.c new file mode 100755 index 000000000..63ac71b61 --- /dev/null +++ b/externals/lyonpotpourri/granulesf~.c @@ -0,0 +1,1076 @@ +#include "MSPd.h" + +#define MAXGRAINS (512) // just for present to get lower overhead + +#define MAXSCALE (8192) +#define OBJECT_NAME "granulesf~" + +static t_class *granulesf_class; + +typedef struct { + float amplitude; + float panL; + float panR; + long delay; // samples to wait until event starts + long duration;// length in samples of event + float phase; // phase for frequency oscillator + float ephase; // phase for envelope + float si; // sampling increment for frequency + float esi; // sampling increment for envelope + float endframe;//boundary frame (extremes are 0 or size-1); approach depends on sign of si + short active;//status of this slot (inactives are available for new grains) +} t_grain; + +typedef struct { + t_word *b_samples; + long b_frames; + long b_nchans;//not needed here +} t_pdbuffer; + + +typedef struct _granulesf +{ + + t_object x_obj; + float x_f; + t_pdbuffer *wavebuf; // holds waveform samples + t_pdbuffer *windowbuf; // holds window samples + t_symbol *wavename; // name of waveform buffer + t_symbol *windowname; // name of window buffer + + float sr; // sampling rate + short mute; + short hosed; // buffers are bad + /* Global grain data*/ + long events; // number of events in a block + long horizon; // length of block for random events + float min_incr; // minimum frequency for a grain + float max_incr; // maximum frequency for a grain + float minpan; // minimum pan for a grain + float maxpan; // maxium pan for a grain + float minamp; // minimum amplitude for a grain + float maxamp; // maximum amplitude for a grain + float mindur; // minumum duration for a grain + float maxdur; // maximum duration for a grain + t_grain *grains; // stores grain data + float *pitchscale; // contains a frequency grid for pitch constraint + int pitchsteps; // number of members in scale + float transpose; // factor for scaling all pitches + float pitch_deviation; // factor to adjust scaled pitches + short steady; // toggles pulsed rhythmic activity + float lowblock_increment; //lowest allowed frequency + float highblock_increment;// highest allowed frequency + float mindur_ms;//store duration in ms + float maxdur_ms;//ditto + float horizon_ms;//ditto + short constrain_scale;//flag to only use bounded portion of scale rather than all of it + short nopan;//stereo channels go straight out, mono goes to center + long minskip;//minimum inskip in samples (default = zero) + long maxskip;//maximum inskip in samples (default = maximum possible given dur/increment of note) + long b_nchans;//channels in buffer (always 1 for Pd, at least today) + long b_frames;//frames in waveform buffer + float retro_odds;//odds to play sample backwards + short interpolate;//flag to interpolate samples - on by default + short interpolate_envelope;//flag to interpolate envelope +} t_granulesf; + +void granulesf_setbuf(t_granulesf *x, t_symbol *wavename, t_symbol *windowname); +void *granulesf_new(t_symbol *msg, short argc, t_atom *argv); +t_int *granulesf_perform(t_int *w); +t_int *granulesf_perform_no_interpolation(t_int *w); +t_int *granulesf_performhose(t_int *w); +void granulesf_dsp(t_granulesf *x, t_signal **sp); +void granulesf_reload(t_granulesf *x); +void granulesf_spray(t_granulesf *x); +void granulesf_pitchspray(t_granulesf *x); +void granulesf_transpose(t_granulesf *x, t_floatarg t); +void granulesf_pitchdev(t_granulesf *x, t_floatarg d); +void granulesf_lowblock(t_granulesf *x, t_floatarg f); +void granulesf_highblock(t_granulesf *x, t_floatarg f); +void granulesf_events(t_granulesf *x, t_floatarg e); +float granulesf_boundrand(float min, float max); +void *granulesf_grist(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv); +void *granulesf_grain(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv); +void *granulesf_setscale(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv); +void granulesf_info(t_granulesf *x); +void granulesf_mute(t_granulesf *x, t_floatarg toggle); +void granulesf_steady(t_granulesf *x, t_floatarg toggle); +void granulesf_constrain_scale(t_granulesf *x, t_floatarg toggle); +void granulesf_dsp_free(t_granulesf *x); +void granulesf_init(t_granulesf *x,short initialized); +void granulesf_constrain(int *index_min, int *index_max, float min_incr, float max_incr, float *scale, int steps); +void granulesf_interpolate(t_granulesf *x, t_floatarg toggle); +void granulesf_nopan(t_granulesf *x, t_floatarg toggle); +void granulesf_retro_odds(t_granulesf *x, t_floatarg o); +void granulesf_seed(t_granulesf *x, t_floatarg seed); +void granulesf_interpolate_envelope(t_granulesf *x, t_floatarg toggle); + + +void granulesf_tilde_setup(void){ + granulesf_class = class_new(gensym("granulesf~"), (t_newmethod)granulesf_new, + (t_method)granulesf_dsp_free,sizeof(t_granulesf), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(granulesf_class, t_granulesf, x_f); + class_addmethod(granulesf_class,(t_method)granulesf_dsp,gensym("dsp"),0); + class_addmethod(granulesf_class,(t_method)granulesf_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_setbuf,gensym("setbuf"),A_DEFSYM,A_DEFSYM,0); + class_addmethod(granulesf_class,(t_method)granulesf_spray,gensym("spray"),0); + class_addmethod(granulesf_class,(t_method)granulesf_info,gensym("info"),0); + class_addmethod(granulesf_class,(t_method)granulesf_pitchspray,gensym("pitchspray"),0); + class_addmethod(granulesf_class,(t_method)granulesf_transpose,gensym("transpose"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_events,gensym("events"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_pitchdev,gensym("pitchdev"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_lowblock,gensym("lowblock"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_highblock,gensym("highblock"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_steady,gensym("steady"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_constrain_scale,gensym("constrain_scale"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_grist,gensym("grist"),A_GIMME,0); + class_addmethod(granulesf_class,(t_method)granulesf_grain,gensym("grain"),A_GIMME,0); + class_addmethod(granulesf_class,(t_method)granulesf_setscale,gensym("setscale"),A_GIMME,0); + class_addmethod(granulesf_class,(t_method)granulesf_interpolate,gensym("interpolate"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_nopan,gensym("nopan"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_retro_odds,gensym("retro_odds"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_seed,gensym("seed"),A_FLOAT,0); + class_addmethod(granulesf_class,(t_method)granulesf_interpolate_envelope,gensym("interpolate_envelope"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void granulesf_interpolate_envelope(t_granulesf *x, t_floatarg toggle) +{ + x->interpolate_envelope = toggle; +} + +void granulesf_seed(t_granulesf *x, t_floatarg seed) +{ + srand((long)seed); +} + +void granulesf_retro_odds(t_granulesf *x, t_floatarg o) +{ + if(o < 0 || o > 1){ + error("retro odds must be within [0.0 - 1.0]"); + return; + } + x->retro_odds = 0; +} + +void granulesf_interpolate(t_granulesf *x, t_floatarg toggle) +{ + x->interpolate = toggle; + post("toggle DACs to change interpolation status"); +} + +void granulesf_nopan(t_granulesf *x, t_floatarg toggle) +{ + x->nopan = toggle; +} + +void granulesf_constrain_scale(t_granulesf *x, t_floatarg toggle) +{ + x->constrain_scale = toggle; +} +void granulesf_lowblock(t_granulesf *x, t_floatarg f) +{ + if(f > 0){ + x->lowblock_increment = f; + } +} + +void granulesf_highblock(t_granulesf *x, t_floatarg f) +{ + if(f > 0){ + x->highblock_increment = f; + } +} + +void granulesf_pitchdev(t_granulesf *x, t_floatarg d) +{ + if(d < 0 ){ + error("pitch deviation must be positive"); + return; + } + x->pitch_deviation = d; +} + +void granulesf_mute(t_granulesf *x, t_floatarg toggle) +{ + x->mute = toggle; +} + +void granulesf_steady(t_granulesf *x, t_floatarg toggle) +{ + x->steady = toggle; +} + +void granulesf_events(t_granulesf *x, t_floatarg e) +{ + if( e <= 0 ){ + post("events must be positive!"); + return; + } + x->events = e; +} + +void granulesf_transpose(t_granulesf *x, t_floatarg t) +{ + if( t <= 0 ){ + error("transpose factor must be greater than zero!"); + return; + } + x->transpose = t; +} + +void *granulesf_setscale(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + float *pitchscale = x->pitchscale; + if( argc >= MAXSCALE ){ + error("%d is the maximum size scale", MAXSCALE); + return 0; + } + if( argc < 2 ){ + error("there must be at least 2 members in scale"); + return 0; + } + for(i=0; i < argc; i++){ + pitchscale[i] = atom_getfloatarg(i,argc,argv); + } + x->pitchsteps = argc; + return 0; +} + +void granulesf_constrain(int *index_min, int *index_max, float min_incr, float max_incr, float *scale, int steps) +{ + int imax = steps - 1; + int imin = 0; + while(scale[imin] < min_incr && imin < imax){ + ++imin; + } + if(imin == imax){ + post("could not constrain minimum index - your grist parameters are out of range for this scale"); + *index_min = 0; + *index_max = steps - 1; + return; + } + while(scale[imax] > max_incr && imax > 0){ + --imax; + } + if(imax < 1 || imax <= imin){ + post("could not constrain maximum index - your grist parameters are out of range for this scale"); + *index_min = 0; + *index_max = steps - 1; + return; + } + *index_min = imin; + *index_max = imax; +} + +void granulesf_pitchspray(t_granulesf *x) +{ + int i,j; + long grainframes; + long b_frames = x->wavebuf->b_frames; + long eframes = x->windowbuf->b_frames; + long minskip = x->minskip; + long maxskip = x->maxskip; + float retro_odds = x->retro_odds; + long horizon = x->horizon; // length of block for random events + float mindur = x->mindur; + float maxdur = x->maxdur; + float min_incr = x->min_incr; // minimum frequency for a grain + float max_incr = x->max_incr; // maximum frequency for a grain + float minpan = x->minpan; // minimum pan for a grain + float maxpan = x->maxpan; // maxium pan for a grain + float minamp = x->minamp; // minimum amplitude for a grain + float maxamp = x->maxamp; // maximum amplitude for a grain + float transpose = x->transpose; // pitch scalar + float lowblock_increment = x->lowblock_increment; + float highblock_increment = x->highblock_increment; + short steady = x->steady; + float pitch_deviation = x->pitch_deviation; + float pdev = 0; + float pdev_invert = 0; + // float pscale; + float pan; + int index_min, index_max; + int steps = x->pitchsteps; + float *scale = x->pitchscale; + int windex; + short inserted = 0; + short constrain_scale = x->constrain_scale; + t_grain *grains = x->grains; + float tmp; + + if( steps < 2 ){ + error("scale is undefined"); + return; + } + if( pitch_deviation ){ + pdev = 1.0 + pitch_deviation; + pdev_invert = 1.0 / pdev; + } + for( i = 0; i < x->events; i++ ){ + inserted = 0; + for(j = 0; j < MAXGRAINS; j++ ){ + if(!grains[j].active){ + if(steady){ + grains[j].delay = (float)(i * horizon) / (float) x->events ; + } else { + grains[j].delay = granulesf_boundrand(0.0,(float) horizon); + } + grains[j].duration = (long) granulesf_boundrand(mindur, maxdur); + grains[j].phase = 0.0; + grains[j].ephase = 0.0; + pan = granulesf_boundrand(minpan, maxpan); + + grains[j].amplitude = granulesf_boundrand(minamp, maxamp); + grains[j].panL = grains[j].amplitude * cos(pan * PIOVERTWO); + grains[j].panR = grains[j].amplitude * sin(pan * PIOVERTWO); + grains[j].amplitude *= .707;//used directly only for "nopan" + + if(constrain_scale){ + granulesf_constrain(&index_min,&index_max,min_incr, max_incr, scale, steps); + windex = (int) granulesf_boundrand((float)index_min, (float)index_max); + } else { + windex = (int) granulesf_boundrand(0.0, (float)(steps)); + } + grains[j].si = transpose * scale[windex]; + // post("windex %d scale[w] %f transpose %f si %f",windex, scale[windex], transpose, grains[j].si ); + grainframes = grains[j].duration * grains[j].si; + grains[j].esi = (float) eframes / (float) grains[j].duration; + + if( pitch_deviation ){ + grains[j].si *= granulesf_boundrand(pdev_invert,pdev); + } + // post("new si: %f", grains[j].si); + /* must add this code to spray, and also do for high frequencies + */ + if(lowblock_increment > 0.0) { + if(grains[j].si < lowblock_increment){ + post("lowblock: aborted grain with %f frequency",grains[j].si); + grains[j].active = 0; // abort grain + goto nextgrain; + } + } + if(highblock_increment > 0.0) { + if(grains[j].si > highblock_increment){ + post("highblock: aborted grain with %f frequency, greater than %f", + grains[j].si, highblock_increment); + grains[j].active = 0; // abort grain + goto nextgrain; + } + } + /* set skip time into sample */ + if(grainframes >= b_frames ){ + error("grain size %.0ld is too long for buffer which is %ld",grainframes, b_frames); + grains[j].active = 0; + goto nextgrain; + } + if(minskip > b_frames - grainframes){//bad minskip + error("minskip time is illegal"); + grains[j].phase = 0.0; + grains[j].endframe = grainframes - 1; + } else { + if(maxskip > b_frames - grainframes){ + grains[j].phase = granulesf_boundrand((float)minskip, (float) (b_frames - grainframes)); + //post("1. minskip %d maxskip %d",minskip,b_frames - grainframes); + } else { + grains[j].phase = granulesf_boundrand((float)minskip, (float)maxskip); + //post("2. minskip %d maxskip %d",minskip,maxskip); + } + grains[j].endframe = grains[j].phase + grainframes - 1; + } + + + if( granulesf_boundrand(0.0,1.0) < retro_odds){//go backwards - make sure to test both boundaries + grains[j].si *= -1.0; + tmp = grains[j].phase; + grains[j].phase = grains[j].endframe; + grains[j].endframe = tmp; + } + /*post("grain: grainframes %d phase %f endframe %f amp %f", + grainframes, grains[j].phase, grains[j].endframe, grains[j].amplitude);*/ + grains[j].active = 1; + inserted = 1; + goto nextgrain; + } + } + if(!inserted){ + error("could not insert grain with increment %f",grains[j].si); + return; + } + nextgrain: ; + } +} + +void granulesf_spray(t_granulesf *x) +{ + int i,j; + long grainframes; + long eframes = x->windowbuf->b_frames; + long b_frames = x->wavebuf->b_frames; + // long b_nchans = x->wavebuf->b_nchans; + // float sr = x->sr; + long horizon = x->horizon; // length of block for random events + float mindur = x->mindur; + float maxdur = x->maxdur; + float min_incr = x->min_incr; // minimum incr for a grain (must be positive!) + float max_incr = x->max_incr; // maximum incr for a grain (must be positive!) + float minpan = x->minpan; // minimum pan for a grain + float maxpan = x->maxpan; // maxium pan for a grain + float minamp = x->minamp; // minimum amplitude for a grain + float maxamp = x->maxamp; // maximum amplitude for a grain + float transpose = x->transpose; // pitch scalar + long minskip = x->minskip; + long maxskip = x->maxskip; + short steady = x->steady; + float retro_odds = x->retro_odds; + float pan; + t_grain *grains = x->grains; + short inserted; + float tmp; + + for( i = 0; i < x->events; i++ ){ + inserted = 0; + for(j = 0; j < MAXGRAINS; j++ ){ + if(!grains[j].active){ + grains[j].active = 1; + if(steady){ + grains[j].delay = (float)(i * horizon) / (float) x->events ; + } else { + grains[j].delay = granulesf_boundrand(0.0,(float) horizon); + } + grains[j].duration = (long) granulesf_boundrand(mindur, maxdur);//frames for this grain + grains[j].ephase = 0.0; + pan = granulesf_boundrand(minpan, maxpan); + grains[j].amplitude = granulesf_boundrand(minamp, maxamp); + grains[j].panL = grains[j].amplitude * cos(pan * PIOVERTWO); + grains[j].panR = grains[j].amplitude * sin(pan * PIOVERTWO); + grains[j].amplitude *= .707;//used directly only for "nopan" + grains[j].si = transpose * granulesf_boundrand(min_incr, max_incr); + + grainframes = grains[j].duration * grains[j].si;//frames to be read from buffer + // grains[j].esi = (float) eframes / (float) grainframes; + grains[j].esi = (float) eframes / (float) grains[j].duration; + if(grainframes >= b_frames ){ + error("grain size %.0ld is too long for buffer which is %ld",grainframes, b_frames); + grains[j].active = 0; + goto nextgrain; + } + if(minskip > b_frames - grainframes){//bad minskip + error("minskip time is illegal"); + grains[j].phase = 0.0; + grains[j].endframe = grainframes - 1; + } else { + if(maxskip > b_frames - grainframes){ + grains[j].phase = granulesf_boundrand((float)minskip, (float) (b_frames - grainframes)); + //post("1. minskip %d maxskip %d",minskip,b_frames - grainframes); + } else { + grains[j].phase = granulesf_boundrand((float)minskip, (float)maxskip); + //post("2. minskip %d maxskip %d",minskip,maxskip); + } + grains[j].endframe = grains[j].phase + grainframes - 1; + } + + if( granulesf_boundrand(0.0,1.0) < retro_odds){//go backwards - make sure to test both boundaries + grains[j].si *= -1.0; + tmp = grains[j].phase; + grains[j].phase = grains[j].endframe; + grains[j].endframe = tmp; + } + inserted = 1; + /* post("startframe %f endframe %f increment %f e-incr %f grainframes %d bframes %d", + grains[j].phase,grains[j].endframe,grains[j].si,grains[j].esi,grainframes, b_frames);*/ + + goto nextgrain; + } + } + if(! inserted){ + error("granulesf~: could not insert grain"); + return; + } + nextgrain: ; + } +} + +void *granulesf_grain(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv) +{ + short inserted; + int j; + float duration, incr, amplitude, pan; + t_grain *grains; + long eframes; + long frames; + float sr; + float skip; + + grains = x->grains; + eframes = x->windowbuf->b_frames; + frames = x->wavebuf->b_frames; + sr = x->sr; + + if(argc < 5){ + error("grain takes 5 arguments, not %d",argc); + post("duration increment amplitude pan skip(in ms)"); + return 0; + } + duration = atom_getintarg(0,argc,argv); + incr = atom_getfloatarg(1,argc,argv); // in ms + amplitude = atom_getfloatarg(2,argc,argv); + pan = atom_getfloatarg(3,argc,argv); + skip = atom_getfloatarg(4,argc,argv) * .001 * sr; + if(skip < 0){ + error("negative skip is illegal"); + return 0; + } + if(skip >= frames){ + error("skip exceeds length of buffer"); + return 0; + } + if(incr == 0.0){ + error("zero increment prohibited"); + return 0; + } + if(duration <= 0.0){ + error("illegal duration:%f",duration); + return 0; + } + if(pan < 0.0 || pan > 1.0){ + error("illegal pan:%f",pan); + return 0; + } + inserted = 0; + for(j = 0; j < MAXGRAINS; j++ ){ + if(!grains[j].active){ + grains[j].delay = 0.0;// immediate deployment + grains[j].duration = (long) (.001 * x->sr * duration); + grains[j].phase = skip; + grains[j].ephase = 0.0; + grains[j].amplitude = amplitude * .707; + grains[j].panL = amplitude * cos(pan * PIOVERTWO); + grains[j].panR = amplitude * sin(pan * PIOVERTWO); + grains[j].esi = (float)eframes / (float)grains[j].duration; + grains[j].si = incr; + grains[j].active = 1; + return 0; + } + } + + error("could not insert grain"); + return 0; + +} + +float granulesf_boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); +} + + +void *granulesf_new(t_symbol *msg, short argc, t_atom *argv) +{ + + t_granulesf *x = (t_granulesf *)pd_new(granulesf_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->wavebuf = (t_pdbuffer*)malloc(sizeof(t_pdbuffer)); + x->windowbuf = (t_pdbuffer*)malloc(sizeof(t_pdbuffer)); + srand(time(0)); //need "seed" message + + x->pitchscale = (float *) t_getbytes(MAXSCALE * sizeof(float)); + x->grains = (t_grain *) t_getbytes(MAXGRAINS * sizeof(t_grain)); + + + // default names + x->wavename = gensym("waveform"); + x->windowname = gensym("window"); + + + // apparently Pd lacks this Max/MSP bug + x->wavename = atom_getsymbolarg(0,argc,argv); + x->windowname = atom_getsymbolarg(1,argc,argv); + + + x->sr = sys_getsr(); + if(! x->sr ) + x->sr = 44100; + + granulesf_init(x,0); + + + return (x); +} + +void granulesf_init(t_granulesf *x,short initialized) +{ + int i; + + if(!initialized){ + x->pitchsteps = 0; // we could predefine a 12t scale + x->mute = 0; + x->steady = 0; + x->events = 1; // set to 10 LATER + x->horizon_ms = 1000; + x->min_incr = 0.5; + x->max_incr = 2.0; + x->minpan = .1; + x->maxpan = .9; + x->minamp = .1; + x->maxamp = 1.0; + x->mindur_ms = 150; + x->maxdur_ms = 750; + x->transpose = 1.0; + x->pitch_deviation = 0.0; + x->lowblock_increment = 0.0; // by default we do not block any increments + x->highblock_increment = 0.0; // ditto + x->constrain_scale = 0; + x->retro_odds = 0.5;// after testing, set this to zero + x->maxskip = -1;//flag to reset in setbuf SHOULD BE -1 + x->nopan = 0;//panning is on by default + x->interpolate = 1; + x->interpolate_envelope = 0; + } + x->horizon = x->horizon_ms * .001 * x->sr; + x->mindur = x->mindur_ms * .001 * x->sr; + x->maxdur = x->maxdur_ms * .001 * x->sr; + for( i = 0; i < MAXGRAINS; i++ ){ // this is what we test for a legal place to insert grain + x->grains[i].active = 0; + } +} + +void granulesf_info(t_granulesf *x) +{ + int tcount = 0; + t_grain *grains = x->grains; + // long eframes = x->windowbuf->b_frames; + int i; + + for(i = 0; i < MAXGRAINS; i++ ){ + if(grains[i].active) + ++tcount; + } + post("%d active grains", tcount); + post("wavename %s", x->wavename->s_name); + post("windowname %s", x->windowname->s_name); + post("sample size: %d",x->wavebuf->b_frames); +} + + +void *granulesf_grist(t_granulesf *x, t_symbol *msg, short argc, t_atom *argv) +{ + if(argc < 10 ){ + error("grist takes 10 arguments:"); + post("events horizon min_incr max_incr minpan maxpan minamp maxamp mindur maxdur"); + return 0; + } + x->events = atom_getintarg(0,argc,argv); + x->horizon_ms = atom_getfloatarg(1,argc,argv); + x->min_incr = atom_getfloatarg(2,argc,argv); + x->max_incr = atom_getfloatarg(3,argc,argv); + x->minpan = atom_getfloatarg(4,argc,argv); + x->maxpan = atom_getfloatarg(5,argc,argv); + x->minamp = atom_getfloatarg(6,argc,argv); + x->maxamp = atom_getfloatarg(7,argc,argv); + x->mindur_ms = atom_getfloatarg(8,argc,argv); + x->maxdur_ms = atom_getfloatarg(9,argc,argv); + + x->mindur = .001 * x->sr * x->mindur_ms ; + x->maxdur = .001 * x->sr * x->maxdur_ms; + x->horizon = .001 * x->sr * x->horizon_ms; + + if(x->min_incr < 0){ + x->min_incr *= -1.0; + } + if(x->max_incr < 0){ + x->max_incr *= -1.0; + } + if(x->minpan < 0.0) { + x->minpan = 0.0; + } + if(x->maxpan > 1.0) { + x->maxpan = 1.0; + } + if(x->events < 0){ + x->events = 0; + } + return 0; +} + + +void granulesf_reload(t_granulesf *x) +{ + granulesf_setbuf(x, x->wavename, x->windowname); +} + + +void granulesf_setbuf(t_granulesf *x, t_symbol *wavename, t_symbol *windowname) +{ + t_garray *a; + int frames; + + x->hosed = 0; + x->wavebuf->b_frames = 0; + x->windowbuf->b_frames = 0; + x->wavebuf->b_nchans = 1;//unused, should kill + x->windowbuf->b_nchans = 1; //unused, should kill + x->b_nchans = 1; + + /* load up sample array */ + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "granulesf~: %s: no such array", wavename->s_name); + x->hosed = 1; + } + else if (!garray_getfloatwords(a, &frames, &x->wavebuf->b_samples)) { + pd_error(x, "%s: bad template for granulesf~", wavename->s_name); + x->hosed = 1; + } + else { + x->wavebuf->b_frames = frames; + x->b_nchans = 1; // Pd buffers are always mono (so far) + garray_usedindsp(a); + } + + /* load up envelope array*/ + if (!(a = (t_garray *)pd_findbyclass(windowname, garray_class))) { + if (*wavename->s_name) pd_error(x, "granulesf~: %s: no such array", windowname->s_name); + x->hosed = 1; + } + else if (!garray_getfloatwords(a, &frames, &x->windowbuf->b_samples)) { + pd_error(x, "%s: bad template for granulesf~", windowname->s_name); + x->hosed = 1; + } + else { + x->windowbuf->b_frames = frames; + garray_usedindsp(a); + } + + x->maxskip = x->wavebuf->b_frames - 1; +} + + +t_int *granulesf_performhose(t_int *w) +{ + // t_granulesf *x = (t_granulesf *) (w[1]); + float *outputL = (t_float *)(w[3]); + float *outputR = (t_float *)(w[4]); + int n = (int) w[5]; + while(n--) *outputL++ = *outputR++ = 0; + return (w+6); +} + +t_int *granulesf_perform_no_interpolation(t_int *w) +{ + t_granulesf *x = (t_granulesf *) (w[1]); + // float *in = (t_float *)(w[2]); // ignoring input + float *outputL = (t_float *)(w[3]); + float *outputR = (t_float *)(w[4]); + int n = (int) w[5]; + + t_pdbuffer *wavebuf = x->wavebuf; + t_pdbuffer *windowbuf = x->windowbuf; + t_word *wavetable = wavebuf->b_samples; + t_word *window = windowbuf->b_samples; + t_grain *grains = x->grains; + long b_nchans = x->b_nchans; + long b_frames = wavebuf->b_frames; + short nopan = x->nopan; + float sample1, sample2; + float envelope; + float amplitude; + float panL, panR; + float si; + float esi; + float phase; + float ephase; + long delay; + long eframes = windowbuf->b_frames; + long current_index; + int i,j; + + + /* grain parameters */ + + + if( x->mute ){ + while(n--) *outputL++ = *outputR++ = 0; + return (w+6); + } + + // pre-clean buffer + for( i = 0; i < n; i++ ){ + outputL[i] = outputR[i] = 0; + } + + for (j=0; j<MAXGRAINS; j++) { + + if(!grains[j].active){ + goto nextgrain; + } + amplitude = grains[j].amplitude; + si = grains[j].si; + esi = grains[j].esi; + phase = grains[j].phase; + ephase = grains[j].ephase; + delay = grains[j].delay; + panL = grains[j].panL; + panR = grains[j].panR; + + + for(i = 0; i < n; i++ ){ + if( delay > 0 ){ + --delay; + } + if( delay <= 0 && ephase < eframes){ + + envelope = amplitude * window[(int)ephase].w_float;// interpolate please! + + if(b_nchans == 1){ + sample1 = wavetable[(int)phase].w_float; + sample1 *= envelope; + if(nopan){ + sample1 *= amplitude; // center it + outputL[i] += sample1; + outputR[i] += sample1; + } else { + outputL[i] += panL * sample1; + outputR[i] += panR * sample1; + } + } else if(b_nchans == 2){ + if(phase < 0 || phase >= b_frames){ + error("phase %f is out of bounds",phase); + goto nextgrain; + } + current_index = (long)(phase * 2.0); + sample1 = wavetable[current_index].w_float; + sample2 = wavetable[current_index+1].w_float; + sample1 *= envelope; + sample2 *= envelope; + if(nopan){ + outputL[i] += sample1 * amplitude; + outputR[i] += sample2 * amplitude; + } else { + outputL[i] += panL * sample1; + outputR[i] += panR * sample2; + } + } + + /*this will be gritty so be sure to interpolate both envelope and sample-lookup */ + + + phase += si; + if(phase < 0 || phase >= b_frames){ + error("phase %f out of bounds",phase); + grains[j].active = 0; + goto nextgrain; + } + ephase += esi; + + + if( ephase >= eframes ){ + grains[j].active = 0; + goto nextgrain; // must escape loop now + } + + } + } + grains[j].phase = phase; + grains[j].ephase = ephase; + grains[j].delay = delay; + + nextgrain: ; + } + + return (w+6); +} + +t_int *granulesf_perform(t_int *w) +{ + t_granulesf *x = (t_granulesf *) (w[1]); + // float *in = (t_float *)(w[2]); // ignoring input + float *outputL = (t_float *)(w[3]); + float *outputR = (t_float *)(w[4]); + int n = (int) w[5]; + + t_pdbuffer *wavebuf = x->wavebuf; + t_pdbuffer *windowbuf = x->windowbuf; + t_word *wavetable = wavebuf->b_samples; + t_word *window = windowbuf->b_samples; + t_grain *grains = x->grains; + long b_nchans = x->b_nchans; + long b_frames = wavebuf->b_frames; + short nopan = x->nopan; + short interpolate_envelope = x->interpolate_envelope; + float sample1, sample2; + float envelope; + float amplitude; + float panL, panR; + float si; + float esi; + float phase; + float ephase; + long delay; + long eframes = windowbuf->b_frames; + long current_index; + float tsmp1, tsmp2; + float frac; + int i,j; + + if( x->mute ){ + while(n--) *outputL++ = *outputR++ = 0; + return (w+6); + } + + // pre-clean buffer + for( i = 0; i < n; i++ ){ + outputL[i] = outputR[i] = 0; + } + + for (j=0; j<MAXGRAINS; j++) { + + if(!grains[j].active){ + goto nextgrain; + } + amplitude = grains[j].amplitude; + si = grains[j].si; + esi = grains[j].esi; + phase = grains[j].phase; + ephase = grains[j].ephase; + delay = grains[j].delay; + panL = grains[j].panL; + panR = grains[j].panR; + + + for(i = 0; i < n; i++ ){ + if( delay > 0 ){ + --delay; + } + if( delay <= 0 && ephase < eframes){ + + if(interpolate_envelope){ + current_index = floor((double)ephase); + frac = ephase - current_index; + if(current_index == 0 || current_index == eframes - 1 || frac == 0.0){// boundary conditions + envelope = window[current_index].w_float; + } else { + tsmp1 = window[current_index].w_float; + tsmp2 = window[current_index + 1].w_float; + envelope = tsmp1 + frac * (tsmp2 - tsmp1); + } + } else { + // envelope = amplitude * window[(int)ephase]; + envelope = window[(int)ephase].w_float;// amplitude built into panL and panR + } + if(b_nchans == 1){ + if(phase < 0 || phase >= b_frames){ + error("phase %f is out of bounds",phase); + goto nextgrain; + } + current_index = floor((double)phase); + frac = phase - current_index; + if(current_index == 0 || current_index == b_frames - 1 || frac == 0.0){// boundary conditions + sample1 = wavetable[current_index].w_float; + } else { + tsmp1 = wavetable[current_index].w_float; + tsmp2 = wavetable[current_index + 1].w_float; + sample1 = tsmp1 + frac * (tsmp2 - tsmp1); + } + sample1 *= envelope; + if(nopan){ + sample1 *= amplitude; // center it + /* accumulate grain samples into output buffer */ + outputL[i] += sample1; + outputR[i] += sample1; + } else { + outputL[i] += panL * sample1; + outputR[i] += panR * sample1; + } + } else if(b_nchans == 2){ + if(phase < 0 || phase >= b_frames){ + error("phase %f is out of bounds",phase); + goto nextgrain; + } + current_index = floor((double)phase); + frac = phase - current_index; + current_index <<= 1;// double it + if(current_index == 0 || current_index == b_frames - 1 || frac == 0.0){ + sample1 = wavetable[current_index].w_float; + sample2 = wavetable[current_index+1].w_float; + } else { + tsmp1 = wavetable[current_index].w_float; + tsmp2 = wavetable[current_index + 2].w_float; + sample1 = tsmp1 + frac * (tsmp2 - tsmp1); + tsmp1 = wavetable[current_index + 1].w_float; + tsmp2 = wavetable[current_index + 3].w_float; + sample2 = tsmp1 + frac * (tsmp2 - tsmp1); + } + + sample1 *= envelope; + sample2 *= envelope; + + if(nopan){ + outputL[i] += sample1 * amplitude; + outputR[i] += sample2 * amplitude; + } else { + outputL[i] += panL * sample1; + outputR[i] += panR * sample2; + } + } + + phase += si; + if(phase < 0 || phase >= b_frames){ + error("phase %f out of bounds",phase); + grains[j].active = 0; + goto nextgrain; + } + ephase += esi; + + + if( ephase >= eframes ){ + grains[j].active = 0; + goto nextgrain; // must escape loop now + } + + } + } + grains[j].phase = phase; + grains[j].ephase = ephase; + grains[j].delay = delay; + + nextgrain: ; + } + return (w+6); +} + +void granulesf_dsp_free(t_granulesf *x) +{ + t_freebytes(x->grains, MAXGRAINS * sizeof(t_grain)); + t_freebytes(x->pitchscale, MAXSCALE * sizeof(float)); +} + +void granulesf_dsp(t_granulesf *x, t_signal **sp) +{ + + granulesf_reload(x); + + if( x->hosed ){ + post("You need some valid buffers"); + dsp_add(granulesf_performhose, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + return; + } + if( x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + if( !x->sr ){ + post("warning: zero sampling rate!"); + x->sr = 44100; + } + granulesf_init(x,1); + } + if(x->interpolate){ + dsp_add(granulesf_perform, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } else { + dsp_add(granulesf_perform_no_interpolation, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } +} + diff --git a/externals/lyonpotpourri/granule~-help.pd b/externals/lyonpotpourri/granule~-help.pd new file mode 100755 index 000000000..76c0ff9f1 --- /dev/null +++ b/externals/lyonpotpourri/granule~-help.pd @@ -0,0 +1,2387 @@ +#N canvas 205 39 516 500 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array waveform 8192 float 3; +#A 0 0 0.00262835 0.00525669 0.00788498 0.0105132 0.0131414 0.0157695 +0.0183974 0.0210252 0.0236529 0.0262804 0.0289077 0.0315348 0.0341617 +0.0367883 0.0394147 0.0420408 0.0446666 0.047292 0.0499172 0.0525419 +0.0551663 0.0577903 0.0604139 0.063037 0.0656597 0.0682819 0.0709036 +0.0735248 0.0761455 0.0787656 0.0813852 0.0840042 0.0866226 0.0892403 +0.0918574 0.0944739 0.0970896 0.0997047 0.102319 0.104933 0.107546 +0.110158 0.112769 0.115379 0.117989 0.120598 0.123206 0.125813 0.128419 +0.131024 0.133629 0.136232 0.138834 0.141436 0.144036 0.146635 0.149234 +0.151831 0.154427 0.157022 0.159616 0.162208 0.1648 0.16739 0.169979 +0.172567 0.175154 0.177739 0.180323 0.182906 0.185488 0.188068 0.190647 +0.193224 0.195801 0.198375 0.200948 0.20352 0.206091 0.20866 0.211227 +0.213793 0.216357 0.21892 0.221481 0.224041 0.226599 0.229155 0.23171 +0.234263 0.236814 0.239364 0.241912 0.244458 0.247003 0.249546 0.252086 +0.254626 0.257163 0.259698 0.262232 0.264764 0.267293 0.269821 0.272347 +0.274871 0.277393 0.279913 0.282432 0.284948 0.287462 0.289973 0.292483 +0.294991 0.297497 0.3 0.302502 0.305001 0.307498 0.309993 0.312485 +0.314976 0.317464 0.319949 0.322433 0.324914 0.327393 0.32987 0.332344 +0.334816 0.337285 0.339752 0.342217 0.344679 0.347139 0.349596 0.35205 +0.354503 0.356952 0.359399 0.361844 0.364286 0.366725 0.369162 0.371596 +0.374027 0.376456 0.378882 0.381306 0.383726 0.386144 0.388559 0.390972 +0.393381 0.395788 0.398192 0.400593 0.402991 0.405387 0.407779 0.410169 +0.412555 0.414939 0.41732 0.419698 0.422072 0.424444 0.426813 0.429179 +0.431541 0.433901 0.436257 0.438611 0.440961 0.443308 0.445652 0.447993 +0.45033 0.452665 0.454996 0.457324 0.459649 0.46197 0.464288 0.466603 +0.468915 0.471223 0.473528 0.475829 0.478127 0.480422 0.482713 0.485001 +0.487285 0.489566 0.491844 0.494118 0.496388 0.498655 0.500919 0.503179 +0.505435 0.507688 0.509937 0.512182 0.514424 0.516662 0.518897 0.521128 +0.523355 0.525578 0.527798 0.530014 0.532226 0.534435 0.53664 0.53884 +0.541038 0.543231 0.54542 0.547606 0.549788 0.551965 0.554139 0.556309 +0.558475 0.560637 0.562796 0.56495 0.5671 0.569246 0.571388 0.573526 +0.575661 0.577791 0.579917 0.582038 0.584156 0.58627 0.588379 0.590485 +0.592586 0.594683 0.596776 0.598864 0.600949 0.603029 0.605105 0.607176 +0.609244 0.611307 0.613366 0.61542 0.61747 0.619516 0.621558 0.623595 +0.625628 0.627656 0.62968 0.631699 0.633714 0.635725 0.637731 0.639733 +0.64173 0.643723 0.645711 0.647694 0.649673 0.651648 0.653618 0.655583 +0.657544 0.6595 0.661452 0.663399 0.665341 0.667279 0.669212 0.67114 +0.673064 0.674983 0.676897 0.678806 0.680711 0.682611 0.684506 0.686396 +0.688282 0.690163 0.692039 0.69391 0.695776 0.697638 0.699494 0.701346 +0.703193 0.705035 0.706872 0.708704 0.710531 0.712353 0.714171 0.715983 +0.71779 0.719593 0.72139 0.723182 0.72497 0.726752 0.728529 0.730301 +0.732068 0.73383 0.735587 0.737339 0.739086 0.740827 0.742564 0.744295 +0.746021 0.747742 0.749458 0.751168 0.752874 0.754574 0.756269 0.757959 +0.759643 0.761322 0.762996 0.764665 0.766328 0.767986 0.769639 0.771287 +0.772929 0.774566 0.776197 0.777823 0.779444 0.78106 0.78267 0.784274 +0.785873 0.787467 0.789056 0.790639 0.792216 0.793788 0.795355 0.796916 +0.798472 0.800022 0.801567 0.803106 0.80464 0.806168 0.807691 0.809208 +0.810719 0.812225 0.813726 0.81522 0.81671 0.818194 0.819672 0.821144 +0.822611 0.824072 0.825528 0.826978 0.828422 0.829861 0.831294 0.832721 +0.834143 0.835559 0.836969 0.838374 0.839773 0.841166 0.842553 0.843935 +0.845311 0.846681 0.848045 0.849404 0.850757 0.852104 0.853445 0.854781 +0.85611 0.857434 0.858752 0.860065 0.861371 0.862672 0.863966 0.865255 +0.866538 0.867815 0.869087 0.870352 0.871612 0.872865 0.874113 0.875355 +0.876591 0.877821 0.879045 0.880263 0.881475 0.882682 0.883882 0.885076 +0.886265 0.887447 0.888624 0.889794 0.890959 0.892117 0.89327 0.894416 +0.895557 0.896691 0.89782 0.898942 0.900059 0.901169 0.902274 0.903372 +0.904464 0.90555 0.906631 0.907705 0.908773 0.909835 0.910891 0.911941 +0.912984 0.914022 0.915054 0.916079 0.917098 0.918112 0.919119 0.92012 +0.921115 0.922103 0.923086 0.924062 0.925033 0.925997 0.926955 0.927907 +0.928853 0.929792 0.930726 0.931653 0.932574 0.933489 0.934398 0.935301 +0.936197 0.937087 0.937971 0.938849 0.939721 0.940586 0.941445 0.942298 +0.943145 0.943986 0.94482 0.945648 0.94647 0.947286 0.948096 0.948899 +0.949696 0.950487 0.951271 0.95205 0.952822 0.953588 0.954347 0.955101 +0.955848 0.956589 0.957323 0.958052 0.958774 0.95949 0.960199 0.960903 +0.9616 0.962291 0.962975 0.963654 0.964325 0.964991 0.965651 0.966304 +0.966951 0.967591 0.968226 0.968854 0.969476 0.970091 0.9707 0.971303 +0.9719 0.97249 0.973074 0.973652 0.974224 0.974789 0.975348 0.975901 +0.976447 0.976987 0.977521 0.978049 0.97857 0.979085 0.979593 0.980096 +0.980592 0.981082 0.981565 0.982042 0.982513 0.982978 0.983436 0.983888 +0.984334 0.984773 0.985206 0.985633 0.986054 0.986468 0.986876 0.987278 +0.987674 0.988063 0.988446 0.988822 0.989193 0.989557 0.989915 0.990266 +0.990612 0.990951 0.991283 0.99161 0.99193 0.992244 0.992552 0.992853 +0.993148 0.993437 0.993719 0.993996 0.994266 0.99453 0.994787 0.995039 +0.995284 0.995523 0.995755 0.995982 0.996202 0.996416 0.996624 0.996825 +0.99702 0.997209 0.997392 0.997569 0.997739 0.997903 0.998061 0.998213 +0.998358 0.998498 0.998631 0.998758 0.998878 0.998993 0.999101 0.999203 +0.999299 0.999389 0.999473 0.99955 0.999622 0.999687 0.999746 0.999798 +0.999845 0.999886 0.99992 0.999948 0.99997 0.999986 0.999996 1 0.999998 +0.999989 0.999974 0.999954 0.999927 0.999894 0.999855 0.99981 0.999759 +0.999701 0.999638 0.999569 0.999493 0.999412 0.999324 0.99923 0.999131 +0.999025 0.998913 0.998795 0.998672 0.998542 0.998406 0.998264 0.998116 +0.997962 0.997802 0.997636 0.997464 0.997287 0.997103 0.996913 0.996717 +0.996516 0.996308 0.996094 0.995875 0.995649 0.995418 0.995181 0.994938 +0.994688 0.994433 0.994172 0.993906 0.993633 0.993354 0.99307 0.99278 +0.992483 0.992182 0.991874 0.99156 0.99124 0.990915 0.990584 0.990247 +0.989904 0.989556 0.989201 0.988841 0.988475 0.988103 0.987726 0.987343 +0.986954 0.986559 0.986158 0.985752 0.98534 0.984923 0.9845 0.98407 +0.983636 0.983195 0.982749 0.982298 0.98184 0.981377 0.980909 0.980434 +0.979954 0.979469 0.978978 0.978481 0.977979 0.977471 0.976957 0.976438 +0.975913 0.975383 0.974847 0.974306 0.973759 0.973207 0.972649 0.972086 +0.971517 0.970942 0.970363 0.969777 0.969187 0.96859 0.967989 0.967382 +0.966769 0.966151 0.965528 0.964899 0.964265 0.963625 0.962981 0.96233 +0.961675 0.961014 0.960348 0.959676 0.958999 0.958317 0.957629 0.956937 +0.956239 0.955535 0.954827 0.954113 0.953394 0.952669 0.95194 0.951205 +0.950465 0.94972 0.94897 0.948214 0.947454 0.946688 0.945917 0.945141 +0.944359 0.943573 0.942782 0.941985 0.941184 0.940377 0.939565 0.938749 +0.937927 0.9371 0.936268 0.935431 0.934589 0.933743 0.932891 0.932034 +0.931172 0.930306 0.929434 0.928558 0.927676 0.92679 0.925898 0.925002 +0.924101 0.923196 0.922285 0.921369 0.920449 0.919524 0.918594 0.917659 +0.91672 0.915775 0.914826 0.913873 0.912914 0.911951 0.910983 0.91001 +0.909033 0.908051 0.907064 0.906073 0.905077 0.904076 0.903071 0.902061 +0.901047 0.900028 0.899004 0.897976 0.896943 0.895906 0.894864 0.893818 +0.892767 0.891712 0.890652 0.889588 0.888519 0.887446 0.886369 0.885287 +0.8842 0.883109 0.882014 0.880915 0.879811 0.878703 0.87759 0.876473 +0.875352 0.874227 0.873097 0.871963 0.870825 0.869682 0.868536 0.867385 +0.86623 0.86507 0.863907 0.862739 0.861567 0.860391 0.859211 0.858027 +0.856839 0.855646 0.85445 0.853249 0.852045 0.850836 0.849623 0.848406 +0.847186 0.845961 0.844732 0.8435 0.842263 0.841023 0.839778 0.83853 +0.837278 0.836022 0.834762 0.833498 0.83223 0.830959 0.829683 0.828404 +0.827121 0.825835 0.824544 0.82325 0.821952 0.82065 0.819345 0.818036 +0.816723 0.815407 0.814087 0.812763 0.811436 0.810105 0.80877 0.807432 +0.80609 0.804745 0.803396 0.802044 0.800688 0.799329 0.797966 0.796599 +0.79523 0.793856 0.79248 0.7911 0.789716 0.788329 0.786939 0.785545 +0.784148 0.782748 0.781344 0.779937 0.778527 0.777113 0.775697 0.774277 +0.772853 0.771427 0.769997 0.768564 0.767128 0.765689 0.764246 0.762801 +0.761352 0.7599 0.758445 0.756987 0.755526 0.754062 0.752595 0.751125 +0.749652 0.748175 0.746696 0.745214 0.743729 0.742241 0.74075 0.739256 +0.737759 0.73626 0.734757 0.733252 0.731744 0.730233 0.728719 0.727202 +0.725683 0.724161 0.722636 0.721108 0.719578 0.718045 0.716509 0.71497 +0.713429 0.711885 0.710339 0.70879 0.707238 0.705684 0.704127 0.702568 +0.701006 0.699442 0.697875 0.696305 0.694733 0.693159 0.691582 0.690003 +0.688421 0.686837 0.68525 0.683661 0.68207 0.680476 0.67888 0.677282 +0.675681 0.674078 0.672473 0.670866 0.669256 0.667644 0.66603 0.664413 +0.662795 0.661174 0.659551 0.657926 0.656299 0.65467 0.653038 0.651405 +0.649769 0.648131 0.646492 0.64485 0.643206 0.64156 0.639913 0.638263 +0.636611 0.634958 0.633302 0.631645 0.629985 0.628324 0.626661 0.624996 +0.62333 0.621661 0.619991 0.618318 0.616645; +#A 1000 0.614969 0.613292 0.611612 0.609931 0.608249 0.606565 0.604879 +0.603191 0.601502 0.599811 0.598118 0.596424 0.594729 0.593032 0.591333 +0.589632 0.587931 0.586227 0.584522 0.582816 0.581108 0.579399 0.577689 +0.575976 0.574263 0.572548 0.570832 0.569114 0.567395 0.565675 0.563954 +0.562231 0.560507 0.558781 0.557054 0.555327 0.553597 0.551867 0.550136 +0.548403 0.546669 0.544934 0.543198 0.54146 0.539722 0.537983 0.536242 +0.5345 0.532758 0.531014 0.529269 0.527523 0.525777 0.524029 0.52228 +0.520531 0.51878 0.517029 0.515276 0.513523 0.511769 0.510014 0.508258 +0.506502 0.504744 0.502986 0.501227 0.499467 0.497707 0.495946 0.494184 +0.492421 0.490658 0.488893 0.487129 0.485363 0.483597 0.481831 0.480063 +0.478296 0.476527 0.474758 0.472989 0.471218 0.469448 0.467677 0.465905 +0.464133 0.462361 0.460588 0.458814 0.45704 0.455266 0.453491 0.451716 +0.449941 0.448165 0.446389 0.444613 0.442836 0.441059 0.439282 0.437504 +0.435727 0.433949 0.43217 0.430392 0.428613 0.426835 0.425056 0.423277 +0.421497 0.419718 0.417938 0.416159 0.414379 0.4126 0.41082 0.40904 +0.40726 0.40548 0.4037 0.401921 0.400141 0.398361 0.396581 0.394802 +0.393022 0.391243 0.389464 0.387685 0.385905 0.384127 0.382348 0.380569 +0.378791 0.377013 0.375235 0.373457 0.37168 0.369903 0.368126 0.36635 +0.364573 0.362797 0.361022 0.359246 0.357472 0.355697 0.353923 0.352149 +0.350376 0.348603 0.346831 0.345059 0.343287 0.341516 0.339746 0.337976 +0.336206 0.334437 0.332669 0.330901 0.329134 0.327367 0.325601 0.323835 +0.32207 0.320306 0.318543 0.31678 0.315018 0.313256 0.311495 0.309735 +0.307976 0.306217 0.304459 0.302702 0.300946 0.29919 0.297435 0.295682 +0.293928 0.292176 0.290425 0.288674 0.286925 0.285176 0.283428 0.281681 +0.279935 0.27819 0.276446 0.274703 0.272961 0.27122 0.26948 0.267741 +0.266003 0.264266 0.26253 0.260795 0.259061 0.257328 0.255597 0.253866 +0.252137 0.250409 0.248682 0.246956 0.245231 0.243507 0.241785 0.240064 +0.238344 0.236626 0.234908 0.233192 0.231477 0.229764 0.228051 0.22634 +0.224631 0.222922 0.221215 0.21951 0.217806 0.216103 0.214401 0.212701 +0.211003 0.209305 0.20761 0.205915 0.204222 0.202531 0.200841 0.199153 +0.197466 0.19578 0.194096 0.192414 0.190733 0.189054 0.187376 0.1857 +0.184026 0.182353 0.180682 0.179012 0.177344 0.175678 0.174013 0.17235 +0.170689 0.169029 0.167371 0.165715 0.16406 0.162408 0.160757 0.159107 +0.15746 0.155814 0.15417 0.152528 0.150888 0.149249 0.147613 0.145978 +0.144345 0.142714 0.141084 0.139457 0.137831 0.136208 0.134586 0.132966 +0.131349 0.129733 0.128119 0.126507 0.124897 0.123289 0.121683 0.120079 +0.118477 0.116877 0.115279 0.113683 0.112089 0.110497 0.108908 0.10732 +0.105734 0.104151 0.10257 0.10099 0.0994133 0.0978384 0.0962655 0.0946949 +0.0931263 0.09156 0.0899959 0.0884339 0.0868741 0.0853166 0.0837613 +0.0822082 0.0806573 0.0791087 0.0775624 0.0760183 0.0744765 0.0729369 +0.0713997 0.0698647 0.0683321 0.0668018 0.0652738 0.0637482 0.0622248 +0.0607039 0.0591853 0.0576691 0.0561552 0.0546438 0.0531347 0.051628 +0.0501238 0.048622 0.0471225 0.0456256 0.0441311 0.042639 0.0411494 +0.0396623 0.0381776 0.0366954 0.0352157 0.0337386 0.0322639 0.0307917 +0.0293221 0.027855 0.0263905 0.0249285 0.023469 0.0220122 0.0205579 +0.0191061 0.017657 0.0162105 0.0147665 0.0133252 0.0118865 0.0104504 +0.00901695 0.00758612 0.00615795 0.00473244 0.00330959 0.0018894 0.000471906 +-0.00094293 -0.00235504 -0.00376449 -0.00517121 -0.00657521 -0.00797651 +-0.0093751 -0.0107709 -0.012164 -0.0135544 -0.014942 -0.0163268 -0.0177089 +-0.0190882 -0.0204647 -0.0218384 -0.0232094 -0.0245775 -0.0259428 -0.0273054 +-0.0286651 -0.030022 -0.031376 -0.0327272 -0.0340756 -0.035421 -0.0367637 +-0.0381035 -0.0394404 -0.0407745 -0.0421056 -0.0434339 -0.0447593 -0.0460817 +-0.0474013 -0.048718 -0.0500317 -0.0513425 -0.0526504 -0.0539554 -0.0552574 +-0.0565565 -0.0578526 -0.0591457 -0.0604359 -0.0617231 -0.0630074 -0.0642887 +-0.065567 -0.0668423 -0.0681145 -0.0693838 -0.0706501 -0.0719134 -0.0731736 +-0.0744309 -0.0756851 -0.0769363 -0.0781844 -0.0794295 -0.0806716 -0.0819105 +-0.0831465 -0.0843793 -0.0856092 -0.0868359 -0.0880595 -0.0892801 -0.0904976 +-0.091712 -0.0929233 -0.0941315 -0.0953366 -0.0965386 -0.0977375 -0.0989332 +-0.100126 -0.101315 -0.102502 -0.103685 -0.104865 -0.106042 -0.107216 +-0.108386 -0.109554 -0.110718 -0.111879 -0.113037 -0.114192 -0.115344 +-0.116492 -0.117638 -0.11878 -0.119919 -0.121054 -0.122187 -0.123316 +-0.124442 -0.125565 -0.126685 -0.127801 -0.128914 -0.130024 -0.131131 +-0.132235 -0.133335 -0.134432 -0.135526 -0.136616 -0.137704 -0.138788 +-0.139869 -0.140946 -0.142021 -0.143092 -0.144159 -0.145224 -0.146285 +-0.147343 -0.148398 -0.149449 -0.150497 -0.151542 -0.152583 -0.153622 +-0.154657 -0.155688 -0.156717 -0.157742 -0.158763 -0.159782 -0.160797 +-0.161809 -0.162817 -0.163822 -0.164824 -0.165823 -0.166818 -0.16781 +-0.168798 -0.169784 -0.170765 -0.171744 -0.172719 -0.173691 -0.174659 +-0.175625 -0.176586 -0.177545 -0.1785 -0.179452 -0.1804 -0.181345 -0.182287 +-0.183226 -0.184161 -0.185092 -0.18602 -0.186945 -0.187867 -0.188785 +-0.1897 -0.190611 -0.19152 -0.192424 -0.193326 -0.194224 -0.195118 +-0.196009 -0.196897 -0.197782 -0.198663 -0.19954 -0.200415 -0.201286 +-0.202153 -0.203017 -0.203878 -0.204736 -0.20559 -0.20644 -0.207288 +-0.208131 -0.208972 -0.209809 -0.210643 -0.211473 -0.2123 -0.213123 +-0.213943 -0.21476 -0.215573 -0.216383 -0.21719 -0.217993 -0.218793 +-0.219589 -0.220382 -0.221172 -0.221958 -0.222741 -0.22352 -0.224296 +-0.225069 -0.225838 -0.226604 -0.227366 -0.228125 -0.228881 -0.229633 +-0.230382 -0.231127 -0.231869 -0.232608 -0.233343 -0.234075 -0.234804 +-0.235529 -0.23625 -0.236969 -0.237684 -0.238395 -0.239103 -0.239808 +-0.240509 -0.241207 -0.241902 -0.242593 -0.243281 -0.243965 -0.244647 +-0.245324 -0.245999 -0.246669 -0.247337 -0.248001 -0.248662 -0.249319 +-0.249973 -0.250624 -0.251271 -0.251915 -0.252556 -0.253193 -0.253827 +-0.254457 -0.255084 -0.255708 -0.256329 -0.256946 -0.257559 -0.25817 +-0.258777 -0.25938 -0.25998 -0.260577 -0.261171 -0.261761 -0.262348 +-0.262932 -0.263512 -0.264089 -0.264662 -0.265232 -0.265799 -0.266363 +-0.266923 -0.26748 -0.268033 -0.268583 -0.26913 -0.269674 -0.270214 +-0.270751 -0.271285 -0.271815 -0.272342 -0.272866 -0.273386 -0.273903 +-0.274417 -0.274928 -0.275435 -0.275939 -0.276439 -0.276937 -0.277431 +-0.277922 -0.278409 -0.278893 -0.279374 -0.279852 -0.280326 -0.280798 +-0.281265 -0.28173 -0.282191 -0.28265 -0.283105 -0.283556 -0.284005 +-0.28445 -0.284892 -0.28533 -0.285766 -0.286198 -0.286627 -0.287053 +-0.287475 -0.287895 -0.288311 -0.288724 -0.289133 -0.28954 -0.289943 +-0.290343 -0.29074 -0.291134 -0.291524 -0.291912 -0.292296 -0.292677 +-0.293055 -0.293429 -0.293801 -0.294169 -0.294534 -0.294896 -0.295255 +-0.295611 -0.295963 -0.296313 -0.296659 -0.297002 -0.297342 -0.297679 +-0.298013 -0.298344 -0.298671 -0.298996 -0.299317 -0.299635 -0.29995 +-0.300262 -0.300571 -0.300877 -0.30118 -0.30148 -0.301776 -0.30207 +-0.30236 -0.302648 -0.302932 -0.303214 -0.303492 -0.303767 -0.304039 +-0.304308 -0.304575 -0.304838 -0.305098 -0.305355 -0.305609 -0.30586 +-0.306108 -0.306353 -0.306595 -0.306834 -0.30707 -0.307303 -0.307533 +-0.307761 -0.307985 -0.308206 -0.308424 -0.308639 -0.308852 -0.309061 +-0.309268 -0.309471 -0.309672 -0.309869 -0.310064 -0.310256 -0.310445 +-0.310631 -0.310814 -0.310994 -0.311172 -0.311346 -0.311518 -0.311687 +-0.311852 -0.312015 -0.312175 -0.312333 -0.312487 -0.312639 -0.312787 +-0.312933 -0.313076 -0.313216 -0.313354 -0.313488 -0.31362 -0.313749 +-0.313875 -0.313999 -0.314119 -0.314237 -0.314352 -0.314465 -0.314574 +-0.314681 -0.314785 -0.314886 -0.314985 -0.31508 -0.315173 -0.315264 +-0.315351 -0.315436 -0.315518 -0.315598 -0.315675 -0.315749 -0.31582 +-0.315889 -0.315955 -0.316018 -0.316079 -0.316137 -0.316192 -0.316245 +-0.316295 -0.316342 -0.316387 -0.316429 -0.316469 -0.316506 -0.31654 +-0.316572 -0.316601 -0.316628 -0.316651 -0.316673 -0.316692 -0.316708 +-0.316722 -0.316733 -0.316741 -0.316747 -0.316751 -0.316752 -0.31675 +-0.316746 -0.31674 -0.316731 -0.316719 -0.316705 -0.316688 -0.316669 +-0.316648 -0.316624 -0.316597 -0.316568 -0.316537 -0.316503 -0.316467 +-0.316428 -0.316387 -0.316344 -0.316298 -0.316249 -0.316199 -0.316146 +-0.31609 -0.316032 -0.315972 -0.315909 -0.315844 -0.315777 -0.315707 +-0.315635 -0.315561 -0.315484 -0.315405 -0.315323 -0.31524 -0.315154 +-0.315065 -0.314975 -0.314882 -0.314787 -0.314689 -0.31459 -0.314488 +-0.314384 -0.314277 -0.314168 -0.314057 -0.313944 -0.313829 -0.313711 +-0.313592 -0.313469 -0.313345 -0.313219 -0.31309 -0.31296 -0.312827 +-0.312692 -0.312554 -0.312415 -0.312274 -0.31213 -0.311984 -0.311836 +-0.311686 -0.311534 -0.31138 -0.311224 -0.311065 -0.310905 -0.310742 +-0.310577 -0.310411 -0.310242 -0.310071 -0.309898 -0.309724 -0.309547 +-0.309368 -0.309187 -0.309004 -0.308819 -0.308632 -0.308443 -0.308252 +-0.308059 -0.307865 -0.307668 -0.307469 -0.307268 -0.307066 -0.306861 +-0.306655 -0.306446 -0.306236 -0.306024 -0.30581 -0.305594 -0.305376 +-0.305156 -0.304934 -0.304711 -0.304485 -0.304258 -0.304029 -0.303798 +-0.303566 -0.303331 -0.303095 -0.302856 -0.302617 -0.302375 -0.302131 +-0.301886 -0.301639 -0.30139 -0.301139 -0.300887 -0.300633 -0.300377 +-0.300119 -0.29986 -0.299599 -0.299336 -0.299072 -0.298806 -0.298538 +-0.298268 -0.297997 -0.297724 -0.29745 -0.297173 -0.296896 -0.296616 +-0.296335 -0.296052 -0.295768 -0.295482 -0.295194 -0.294905 -0.294614 +-0.294322 -0.294028 -0.293733 -0.293436 -0.293137 -0.292837 -0.292535 +-0.292232 -0.291927 -0.291621 -0.291313 -0.291003 -0.290693 -0.29038 +-0.290066 -0.289751 -0.289434 -0.289116 -0.288796 -0.288475 -0.288153 +-0.287829 -0.287503 -0.287176 -0.286848 -0.286518 -0.286187 -0.285854 +-0.28552 -0.285185 -0.284848 -0.28451 -0.284171 -0.28383 -0.283488 +-0.283145 -0.2828 -0.282454 -0.282106; +#A 2000 -0.281757 -0.281407 -0.281056 -0.280703 -0.280349 -0.279994 +-0.279637 -0.27928 -0.278921 -0.27856 -0.278199 -0.277836 -0.277472 +-0.277107 -0.27674 -0.276372 -0.276004 -0.275633 -0.275262 -0.27489 +-0.274516 -0.274141 -0.273765 -0.273388 -0.27301 -0.27263 -0.27225 +-0.271868 -0.271485 -0.271101 -0.270716 -0.27033 -0.269943 -0.269555 +-0.269165 -0.268775 -0.268383 -0.267991 -0.267597 -0.267202 -0.266806 +-0.266409 -0.266012 -0.265613 -0.265213 -0.264812 -0.26441 -0.264007 +-0.263603 -0.263199 -0.262793 -0.262386 -0.261978 -0.261569 -0.26116 +-0.260749 -0.260338 -0.259925 -0.259512 -0.259097 -0.258682 -0.258266 +-0.257849 -0.257431 -0.257012 -0.256593 -0.256172 -0.255751 -0.255329 +-0.254905 -0.254481 -0.254057 -0.253631 -0.253205 -0.252777 -0.252349 +-0.25192 -0.251491 -0.25106 -0.250629 -0.250197 -0.249764 -0.249331 +-0.248896 -0.248461 -0.248025 -0.247589 -0.247151 -0.246713 -0.246275 +-0.245835 -0.245395 -0.244954 -0.244513 -0.24407 -0.243627 -0.243184 +-0.242739 -0.242294 -0.241849 -0.241403 -0.240956 -0.240508 -0.24006 +-0.239611 -0.239162 -0.238711 -0.238261 -0.23781 -0.237358 -0.236905 +-0.236452 -0.235998 -0.235544 -0.23509 -0.234634 -0.234178 -0.233722 +-0.233265 -0.232807 -0.232349 -0.231891 -0.231432 -0.230972 -0.230512 +-0.230051 -0.22959 -0.229129 -0.228667 -0.228204 -0.227741 -0.227278 +-0.226814 -0.226349 -0.225885 -0.225419 -0.224954 -0.224487 -0.224021 +-0.223554 -0.223086 -0.222619 -0.22215 -0.221682 -0.221213 -0.220744 +-0.220274 -0.219804 -0.219333 -0.218862 -0.218391 -0.21792 -0.217448 +-0.216975 -0.216503 -0.21603 -0.215557 -0.215083 -0.214609 -0.214135 +-0.213661 -0.213186 -0.212711 -0.212236 -0.21176 -0.211284 -0.210808 +-0.210332 -0.209855 -0.209378 -0.208901 -0.208424 -0.207946 -0.207469 +-0.206991 -0.206512 -0.206034 -0.205555 -0.205076 -0.204597 -0.204118 +-0.203639 -0.203159 -0.202679 -0.202199 -0.201719 -0.201239 -0.200758 +-0.200278 -0.199797 -0.199316 -0.198835 -0.198354 -0.197873 -0.197391 +-0.19691 -0.196428 -0.195946 -0.195465 -0.194983 -0.194501 -0.194019 +-0.193537 -0.193054 -0.192572 -0.19209 -0.191607 -0.191125 -0.190642 +-0.19016 -0.189677 -0.189195 -0.188712 -0.188229 -0.187747 -0.187264 +-0.186781 -0.186298 -0.185816 -0.185333 -0.18485 -0.184368 -0.183885 +-0.183402 -0.18292 -0.182437 -0.181954 -0.181472 -0.180989 -0.180507 +-0.180025 -0.179542 -0.17906 -0.178578 -0.178096 -0.177614 -0.177132 +-0.17665 -0.176168 -0.175687 -0.175205 -0.174724 -0.174242 -0.173761 +-0.17328 -0.172799 -0.172318 -0.171837 -0.171357 -0.170876 -0.170396 +-0.169916 -0.169436 -0.168956 -0.168476 -0.167997 -0.167517 -0.167038 +-0.166559 -0.16608 -0.165601 -0.165123 -0.164645 -0.164166 -0.163689 +-0.163211 -0.162733 -0.162256 -0.161779 -0.161302 -0.160826 -0.160349 +-0.159873 -0.159397 -0.158922 -0.158446 -0.157971 -0.157496 -0.157021 +-0.156547 -0.156073 -0.155599 -0.155125 -0.154652 -0.154179 -0.153706 +-0.153234 -0.152762 -0.15229 -0.151818 -0.151347 -0.150876 -0.150405 +-0.149935 -0.149465 -0.148995 -0.148525 -0.148056 -0.147587 -0.147119 +-0.146651 -0.146183 -0.145716 -0.145249 -0.144782 -0.144315 -0.143849 +-0.143384 -0.142918 -0.142453 -0.141989 -0.141525 -0.141061 -0.140597 +-0.140134 -0.139671 -0.139209 -0.138747 -0.138286 -0.137825 -0.137364 +-0.136903 -0.136444 -0.135984 -0.135525 -0.135066 -0.134608 -0.13415 +-0.133693 -0.133236 -0.132779 -0.132323 -0.131867 -0.131412 -0.130957 +-0.130503 -0.130049 -0.129595 -0.129142 -0.12869 -0.128238 -0.127786 +-0.127335 -0.126884 -0.126434 -0.125984 -0.125535 -0.125086 -0.124638 +-0.12419 -0.123743 -0.123296 -0.122849 -0.122403 -0.121958 -0.121513 +-0.121069 -0.120625 -0.120181 -0.119739 -0.119296 -0.118854 -0.118413 +-0.117972 -0.117532 -0.117092 -0.116653 -0.116214 -0.115776 -0.115338 +-0.114901 -0.114465 -0.114029 -0.113593 -0.113158 -0.112724 -0.11229 +-0.111857 -0.111424 -0.110992 -0.11056 -0.110129 -0.109698 -0.109268 +-0.108839 -0.10841 -0.107982 -0.107554 -0.107127 -0.1067 -0.106274 +-0.105849 -0.105424 -0.105 -0.104576 -0.104153 -0.103731 -0.103309 +-0.102888 -0.102467 -0.102047 -0.101628 -0.101209 -0.10079 -0.100373 +-0.0999556 -0.0995391 -0.0991233 -0.098708 -0.0982934 -0.0978793 -0.0974659 +-0.0970532 -0.096641 -0.0962294 -0.0958185 -0.0954082 -0.0949985 -0.0945894 +-0.094181 -0.0937732 -0.0933661 -0.0929595 -0.0925536 -0.0921484 -0.0917437 +-0.0913398 -0.0909364 -0.0905337 -0.0901317 -0.0897302 -0.0893295 -0.0889293 +-0.0885299 -0.088131 -0.0877329 -0.0873353 -0.0869384 -0.0865422 -0.0861467 +-0.0857518 -0.0853575 -0.0849639 -0.084571 -0.0841787 -0.0837871 -0.0833962 +-0.0830059 -0.0826163 -0.0822274 -0.0818391 -0.0814515 -0.0810646 -0.0806783 +-0.0802927 -0.0799078 -0.0795236 -0.07914 -0.0787571 -0.0783749 -0.0779934 +-0.0776125 -0.0772324 -0.0768529 -0.0764741 -0.0760959 -0.0757185 -0.0753417 +-0.0749657 -0.0745903 -0.0742156 -0.0738416 -0.0734682 -0.0730956 -0.0727237 +-0.0723524 -0.0719818 -0.071612 -0.0712428 -0.0708743 -0.0705065 -0.0701394 +-0.069773 -0.0694073 -0.0690423 -0.068678 -0.0683144 -0.0679515 -0.0675893 +-0.0672278 -0.0668669 -0.0665068 -0.0661474 -0.0657887 -0.0654307 -0.0650734 +-0.0647167 -0.0643609 -0.0640056 -0.0636512 -0.0632973 -0.0629443 -0.0625919 +-0.0622402 -0.0618892 -0.061539 -0.0611894 -0.0608406 -0.0604924 -0.060145 +-0.0597983 -0.0594522 -0.0591069 -0.0587623 -0.0584184 -0.0580752 -0.0577328 +-0.057391 -0.0570499 -0.0567096 -0.0563699 -0.056031 -0.0556928 -0.0553553 +-0.0550185 -0.0546824 -0.054347 -0.0540123 -0.0536784 -0.0533451 -0.0530126 +-0.0526808 -0.0523496 -0.0520192 -0.0516895 -0.0513605 -0.0510323 -0.0507047 +-0.0503778 -0.0500517 -0.0497262 -0.0494015 -0.0490775 -0.0487542 -0.0484316 +-0.0481097 -0.0477886 -0.0474681 -0.0471483 -0.0468293 -0.0465109 -0.0461933 +-0.0458763 -0.0455601 -0.0452446 -0.0449298 -0.0446157 -0.0443023 -0.0439897 +-0.0436777 -0.0433664 -0.0430558 -0.042746 -0.0424368 -0.0421284 -0.0418206 +-0.0415136 -0.0412072 -0.0409016 -0.0405966 -0.0402924 -0.0399889 -0.0396861 +-0.0393839 -0.0390825 -0.0387818 -0.0384818 -0.0381824 -0.0378838 -0.0375859 +-0.0372886 -0.0369921 -0.0366963 -0.0364011 -0.0361067 -0.0358129 -0.0355199 +-0.0352275 -0.0349358 -0.0346448 -0.0343546 -0.034065 -0.0337761 -0.0334878 +-0.0332003 -0.0329135 -0.0326274 -0.0323419 -0.0320571 -0.031773 -0.0314896 +-0.0312069 -0.0309249 -0.0306435 -0.0303629 -0.0300829 -0.0298036 -0.0295249 +-0.029247 -0.0289697 -0.0286932 -0.0284172 -0.028142 -0.0278675 -0.0275936 +-0.0273204 -0.0270479 -0.026776 -0.0265048 -0.0262343 -0.0259644 -0.0256953 +-0.0254268 -0.0251589 -0.0248917 -0.0246252 -0.0243594 -0.0240942 -0.0238297 +-0.0235659 -0.0233027 -0.0230401 -0.0227782 -0.022517 -0.0222565 -0.0219966 +-0.0217373 -0.0214787 -0.0212208 -0.0209635 -0.0207069 -0.0204509 -0.0201956 +-0.0199409 -0.0196868 -0.0194334 -0.0191807 -0.0189286 -0.0186771 -0.0184263 +-0.0181761 -0.0179266 -0.0176777 -0.0174294 -0.0171818 -0.0169348 -0.0166885 +-0.0164428 -0.0161977 -0.0159532 -0.0157094 -0.0154662 -0.0152236 -0.0149817 +-0.0147404 -0.0144997 -0.0142596 -0.0140202 -0.0137814 -0.0135432 -0.0133056 +-0.0130686 -0.0128323 -0.0125965 -0.0123614 -0.0121269 -0.011893 -0.0116597 +-0.011427 -0.0111949 -0.0109635 -0.0107326 -0.0105023 -0.0102727 -0.0100437 +-0.00981519 -0.00958733 -0.0093601 -0.00913343 -0.00890737 -0.00868189 +-0.00845702 -0.00823273 -0.00800903 -0.00778593 -0.00756341 -0.00734148 +-0.00712013 -0.00689937 -0.00667918 -0.00645957 -0.00624055 -0.00602211 +-0.00580423 -0.00558695 -0.00537023 -0.00515408 -0.00493852 -0.00472352 +-0.00450907 -0.00429521 -0.00408192 -0.00386917 -0.003657 -0.00344538 +-0.00323433 -0.00302386 -0.00281391 -0.00260454 -0.00239571 -0.00218744 +-0.00197973 -0.00177256 -0.00156595 -0.00135988 -0.00115436 -0.00094938 +-0.00074496 -0.000541066 -0.00033771 -0.000134914 6.73617e-05 0.000269101 +0.000470301 0.000670969 0.000871101 0.00107069 0.00126976 0.00146832 +0.00166633 0.00186383 0.00206079 0.00225723 0.00245315 0.00264857 0.00284346 +0.00303783 0.00323169 0.00342502 0.00361785 0.00381017 0.00400199 0.0041933 +0.00438408 0.00457438 0.00476416 0.00495345 0.00514224 0.00533054 0.00551832 +0.00570561 0.00589241 0.00607872 0.00626455 0.00644987 0.00663471 0.00681906 +0.00700291 0.0071863 0.00736919 0.00755162 0.00773356 0.00791502 0.00809601 +0.00827651 0.00845654 0.0086361 0.00881518 0.00899382 0.00917198 0.00934966 +0.00952689 0.00970364 0.00987995 0.0100558 0.0102312 0.0104061 0.0105806 +0.0107546 0.0109281 0.0111012 0.0112739 0.0114461 0.0116179 0.0117892 +0.0119601 0.0121305 0.0123005 0.0124701 0.0126392 0.0128079 0.0129761 +0.0131439 0.0133113 0.0134783 0.0136448 0.0138109 0.0139766 0.0141418 +0.0143066 0.014471 0.014635 0.0147986 0.0149617 0.0151245 0.0152868 +0.0154487 0.0156102 0.0157713 0.015932 0.0160923 0.0162521 0.0164116 +0.0165707 0.0167293 0.0168876 0.0170455 0.0172029 0.01736 0.0175167 +0.017673 0.0178289 0.0179844 0.0181395 0.0182943 0.0184486 0.0186026 +0.0187562 0.0189094 0.0190622 0.0192147 0.0193668 0.0195185 0.0196698 +0.0198208 0.0199714 0.0201216 0.0202715 0.020421 0.0205701 0.0207189 +0.0208673 0.0210153 0.021163 0.0213104 0.0214574 0.021604 0.0217503 +0.0218962 0.0220417 0.022187 0.0223318 0.0224764 0.0226206 0.0227644 +0.0229079 0.0230511 0.0231939 0.0233364 0.0234785 0.0236203 0.0237618 +0.023903 0.0240438 0.0241843 0.0243245 0.0244643 0.0246038 0.024743 +0.0248819 0.0250204 0.0251587 0.0252966 0.0254342 0.0255715 0.0257084 +0.0258451 0.0259814 0.0261175 0.0262532 0.0263886 0.0265237 0.0266585 +0.026793 0.0269272 0.0270611 0.0271947 0.027328 0.027461 0.0275937 +0.0277261 0.0278583 0.0279901 0.0281216 0.0282529 0.0283839 0.0285145 +0.0286449 0.028775 0.0289049 0.0290344 0.0291637 0.0292926 0.0294214 +0.0295498 0.0296779 0.0298058 0.0299334 0.0300607 0.0301878 0.0303146 +0.0304411 0.0305674 0.0306934 0.0308191 0.0309445 0.0310698 0.0311947 +0.0313194 0.0314438 0.0315679 0.0316919 0.0318155 0.0319389 0.032062 +0.0321849 0.0323076 0.0324299 0.0325521 0.032674 0.0327956 0.032917 +0.0330382 0.0331591 0.0332798 0.0334002 0.0335204 0.0336403 0.0337601 +0.0338795 0.0339988 0.0341178 0.0342365 0.0343551 0.0344734 0.0345915 +0.0347093 0.034827 0.0349444 0.0350615 0.0351785 0.0352952 0.0354117 +0.035528 0.035644 0.0357598 0.0358755 0.0359908 0.036106 0.036221 0.0363357 +0.0364503 0.0365646 0.0366787 0.0367926 0.0369063 0.0370197 0.037133 +0.037246 0.0373589 0.0374715 0.037584 0.0376962 0.0378082 0.0379201 +0.0380317 0.0381431 0.0382543 0.0383654 0.0384762 0.0385868 0.0386972 +0.0388075 0.0389175 0.0390274 0.039137 0.0392465 0.0393558 0.0394648 +0.0395737; +#A 3000 0.0396824 0.039791 0.0398993 0.0400074 0.0401154 0.0402231 +0.0403307 0.0404381 0.0405453 0.0406524 0.0407592 0.0408659 0.0409724 +0.0410787 0.0411848 0.0412908 0.0413966 0.0415022 0.0416076 0.0417129 +0.0418179 0.0419228 0.0420276 0.0421321 0.0422365 0.0423407 0.0424448 +0.0425486 0.0426523 0.0427559 0.0428592 0.0429624 0.0430655 0.0431683 +0.043271 0.0433736 0.0434759 0.0435781 0.0436802 0.0437821 0.0438838 +0.0439854 0.0440868 0.044188 0.0442891 0.04439 0.0444907 0.0445913 +0.0446918 0.0447921 0.0448922 0.0449922 0.045092 0.0451916 0.0452911 +0.0453905 0.0454897 0.0455887 0.0456876 0.0457863 0.0458849 0.0459834 +0.0460816 0.0461798 0.0462777 0.0463756 0.0464732 0.0465708 0.0466681 +0.0467654 0.0468625 0.0469594 0.0470562 0.0471528 0.0472493 0.0473456 +0.0474418 0.0475379 0.0476338 0.0477296 0.0478252 0.0479207 0.048016 +0.0481112 0.0482062 0.0483011 0.0483959 0.0484905 0.0485849 0.0486793 +0.0487734 0.0488675 0.0489614 0.0490552 0.0491487 0.0492422 0.0493356 +0.0494288 0.0495218 0.0496147 0.0497075 0.0498001 0.0498926 0.049985 +0.0500772 0.0501693 0.0502612 0.050353 0.0504447 0.0505362 0.0506276 +0.0507188 0.0508099 0.0509009 0.0509917 0.0510824 0.051173 0.0512634 +0.0513537 0.0514438 0.0515338 0.0516237 0.0517134 0.051803 0.0518924 +0.0519817 0.0520709 0.05216 0.0522489 0.0523376 0.0524263 0.0525148 +0.0526031 0.0526913 0.0527794 0.0528674 0.0529552 0.0530428 0.0531304 +0.0532178 0.053305 0.0533921 0.0534791 0.053566 0.0536527 0.0537392 +0.0538257 0.053912 0.0539981 0.0540841 0.05417 0.0542557 0.0543413 +0.0544268 0.0545121 0.0545973 0.0546824 0.0547673 0.054852 0.0549367 +0.0550211 0.0551055 0.0551897 0.0552738 0.0553577 0.0554415 0.0555251 +0.0556086 0.055692 0.0557752 0.0558583 0.0559412 0.056024 0.0561067 +0.0561892 0.0562716 0.0563538 0.0564359 0.0565178 0.0565996 0.0566812 +0.0567627 0.0568441 0.0569253 0.0570064 0.0570873 0.0571681 0.0572487 +0.0573292 0.0574095 0.0574897 0.0575698 0.0576497 0.0577294 0.057809 +0.0578885 0.0579678 0.0580469 0.0581259 0.0582048 0.0582835 0.058362 +0.0584404 0.0585187 0.0585968 0.0586747 0.0587525 0.0588301 0.0589076 +0.0589849 0.0590621 0.0591391 0.059216 0.0592927 0.0593692 0.0594456 +0.0595218 0.0595979 0.0596738 0.0597496 0.0598251 0.0599006 0.0599759 +0.060051 0.0601259 0.0602007 0.0602753 0.0603498 0.0604241 0.0604982 +0.0605722 0.060646 0.0607197 0.0607932 0.0608665 0.0609396 0.0610126 +0.0610854 0.061158 0.0612305 0.0613028 0.0613749 0.0614469 0.0615187 +0.0615903 0.0616617 0.061733 0.0618041 0.061875 0.0619457 0.0620163 +0.0620867 0.0621569 0.0622269 0.0622968 0.0623665 0.062436 0.0625053 +0.0625744 0.0626434 0.0627121 0.0627807 0.0628491 0.0629174 0.0629854 +0.0630533 0.0631209 0.0631884 0.0632557 0.0633228 0.0633897 0.0634564 +0.063523 0.0635893 0.0636555 0.0637214 0.0637872 0.0638528 0.0639182 +0.0639833 0.0640483 0.0641131 0.0641777 0.0642421 0.0643063 0.0643703 +0.0644341 0.0644977 0.0645611 0.0646243 0.0646873 0.0647501 0.0648126 +0.064875 0.0649372 0.0649991 0.0650609 0.0651225 0.0651838 0.0652449 +0.0653058 0.0653665 0.065427 0.0654873 0.0655474 0.0656072 0.0656668 +0.0657263 0.0657855 0.0658444 0.0659032 0.0659618 0.0660201 0.0660782 +0.066136 0.0661937 0.0662511 0.0663084 0.0663653 0.0664221 0.0664786 +0.0665349 0.066591 0.0666468 0.0667024 0.0667578 0.066813 0.0668679 +0.0669225 0.066977 0.0670312 0.0670852 0.0671389 0.0671924 0.0672457 +0.0672987 0.0673515 0.067404 0.0674563 0.0675084 0.0675602 0.0676118 +0.0676631 0.0677141 0.067765 0.0678155 0.0678658 0.0679159 0.0679658 +0.0680153 0.0680647 0.0681137 0.0681625 0.0682111 0.0682594 0.0683074 +0.0683552 0.0684027 0.06845 0.068497 0.0685437 0.0685902 0.0686364 +0.0686823 0.068728 0.0687734 0.0688186 0.0688635 0.0689081 0.0689524 +0.0689965 0.0690403 0.0690838 0.069127 0.06917 0.0692127 0.0692551 +0.0692973 0.0693391 0.0693807 0.069422 0.0694631 0.0695038 0.0695443 +0.0695844 0.0696243 0.0696639 0.0697033 0.0697423 0.069781 0.0698195 +0.0698577 0.0698955 0.0699331 0.0699704 0.0700074 0.0700441 0.0700805 +0.0701166 0.0701524 0.0701879 0.0702231 0.070258 0.0702926 0.0703269 +0.0703609 0.0703946 0.070428 0.0704611 0.0704938 0.0705263 0.0705585 +0.0705903 0.0706219 0.0706531 0.070684 0.0707146 0.0707449 0.0707748 +0.0708045 0.0708338 0.0708629 0.0708916 0.0709199 0.070948 0.0709757 +0.0710031 0.0710302 0.071057 0.0710834 0.0711095 0.0711353 0.0711608 +0.0711859 0.0712107 0.0712351 0.0712593 0.0712831 0.0713065 0.0713297 +0.0713525 0.0713749 0.071397 0.0714188 0.0714403 0.0714614 0.0714821 +0.0715026 0.0715226 0.0715424 0.0715617 0.0715808 0.0715995 0.0716178 +0.0716358 0.0716535 0.0716708 0.0716877 0.0717043 0.0717206 0.0717365 +0.071752 0.0717672 0.071782 0.0717965 0.0718106 0.0718243 0.0718377 +0.0718507 0.0718634 0.0718757 0.0718877 0.0718993 0.0719104 0.0719213 +0.0719318 0.0719419 0.0719516 0.071961 0.07197 0.0719787 0.0719869 +0.0719948 0.0720023 0.0720095 0.0720162 0.0720226 0.0720286 0.0720343 +0.0720395 0.0720444 0.0720489 0.072053 0.0720568 0.0720601 0.0720631 +0.0720657 0.0720679 0.0720697 0.0720711 0.0720721 0.0720728 0.0720731 +0.072073 0.0720724 0.0720715 0.0720702 0.0720685 0.0720664 0.072064 +0.0720611 0.0720578 0.0720541 0.0720501 0.0720456 0.0720407 0.0720355 +0.0720298 0.0720238 0.0720173 0.0720104 0.0720031 0.0719955 0.0719874 +0.0719789 0.07197 0.0719607 0.071951 0.0719409 0.0719304 0.0719194 +0.0719081 0.0718963 0.0718841 0.0718716 0.0718586 0.0718452 0.0718313 +0.0718171 0.0718024 0.0717874 0.0717719 0.071756 0.0717396 0.0717229 +0.0717057 0.0716881 0.0716701 0.0716517 0.0716328 0.0716136 0.0715939 +0.0715737 0.0715532 0.0715322 0.0715108 0.071489 0.0714667 0.071444 +0.0714209 0.0713973 0.0713734 0.071349 0.0713241 0.0712989 0.0712732 +0.071247 0.0712205 0.0711935 0.071166 0.0711382 0.0711099 0.0710811 +0.0710519 0.0710223 0.0709923 0.0709617 0.0709308 0.0708994 0.0708676 +0.0708354 0.0708027 0.0707695 0.070736 0.070702 0.0706675 0.0706326 +0.0705972 0.0705614 0.0705252 0.0704885 0.0704514 0.0704138 0.0703758 +0.0703373 0.0702984 0.070259 0.0702192 0.070179 0.0701382 0.0700971 +0.0700555 0.0700134 0.0699709 0.0699279 0.0698845 0.0698407 0.0697963 +0.0697516 0.0697063 0.0696606 0.0696145 0.0695679 0.0695209 0.0694734 +0.0694254 0.069377 0.0693282 0.0692788 0.0692291 0.0691788 0.0691281 +0.069077 0.0690254 0.0689733 0.0689208 0.0688678 0.0688144 0.0687605 +0.0687061 0.0686513 0.068596 0.0685403 0.068484 0.0684274 0.0683702 +0.0683127 0.0682546 0.0681961 0.0681372 0.0680777 0.0680178 0.0679575 +0.0678966 0.0678353 0.0677736 0.0677114 0.0676487 0.0675856 0.067522 +0.0674579 0.0673934 0.0673284 0.067263 0.067197 0.0671306 0.0670638 +0.0669965 0.0669287 0.0668604 0.0667917 0.0667225 0.0666529 0.0665828 +0.0665122 0.0664412 0.0663697 0.0662977 0.0662253 0.0661523 0.066079 +0.0660051 0.0659309 0.0658561 0.0657808 0.0657051 0.065629 0.0655523 +0.0654752 0.0653977 0.0653197 0.0652412 0.0651622 0.0650828 0.0650029 +0.0649225 0.0648417 0.0647604 0.0646786 0.0645964 0.0645137 0.0644306 +0.064347 0.0642629 0.0641783 0.0640933 0.0640078 0.0639219 0.0638355 +0.0637486 0.0636612 0.0635734 0.0634852 0.0633964 0.0633073 0.0632176 +0.0631275 0.0630369 0.0629458 0.0628543 0.0627623 0.0626699 0.062577 +0.0624836 0.0623898 0.0622955 0.0622008 0.0621056 0.0620099 0.0619138 +0.0618172 0.0617201 0.0616226 0.0615246 0.0614262 0.0613273 0.061228 +0.0611282 0.0610279 0.0609272 0.060826 0.0607244 0.0606223 0.0605197 +0.0604167 0.0603132 0.0602093 0.0601049 0.0600001 0.0598948 0.0597891 +0.0596829 0.0595762 0.0594691 0.0593616 0.0592536 0.0591451 0.0590362 +0.0589268 0.058817 0.0587068 0.058596 0.0584849 0.0583733 0.0582612 +0.0581487 0.0580358 0.0579224 0.0578085 0.0576942 0.0575795 0.0574643 +0.0573487 0.0572326 0.0571161 0.0569992 0.0568817 0.0567639 0.0566456 +0.0565269 0.0564077 0.0562882 0.0561681 0.0560476 0.0559267 0.0558054 +0.0556836 0.0555613 0.0554387 0.0553156 0.0551921 0.0550681 0.0549437 +0.0548189 0.0546936 0.0545679 0.0544418 0.0543152 0.0541883 0.0540609 +0.053933 0.0538047 0.0536761 0.0535469 0.0534174 0.0532874 0.0531571 +0.0530263 0.052895 0.0527634 0.0526313 0.0524988 0.0523659 0.0522326 +0.0520988 0.0519646 0.0518301 0.0516951 0.0515597 0.0514238 0.0512876 +0.051151 0.0510139 0.0508764 0.0507385 0.0506003 0.0504616 0.0503225 +0.050183 0.050043 0.0499027 0.049762 0.0496209 0.0494794 0.0493374 +0.0491951 0.0490524 0.0489093 0.0487657 0.0486218 0.0484775 0.0483328 +0.0481877 0.0480422 0.0478963 0.04775 0.0476034 0.0474563 0.0473089 +0.047161 0.0470128 0.0468642 0.0467152 0.0465659 0.0464161 0.046266 +0.0461155 0.0459646 0.0458133 0.0456617 0.0455096 0.0453572 0.0452045 +0.0450513 0.0448978 0.0447439 0.0445897 0.044435 0.04428 0.0441247 +0.043969 0.0438129 0.0436564 0.0434996 0.0433424 0.0431849 0.043027 +0.0428688 0.0427102 0.0425512 0.0423919 0.0422322 0.0420722 0.0419118 +0.0417511 0.04159 0.0414286 0.0412668 0.0411047 0.0409423 0.0407795 +0.0406163 0.0404528 0.040289 0.0401249 0.0399604 0.0397955 0.0396304 +0.0394649 0.0392991 0.0391329 0.0389664 0.0387996 0.0386325 0.038465 +0.0382972 0.0381291 0.0379606 0.0377919 0.0376228 0.0374534 0.0372837 +0.0371137 0.0369433 0.0367727 0.0366017 0.0364304 0.0362589 0.036087 +0.0359148 0.0357423 0.0355695 0.0353964 0.035223 0.0350492 0.0348752 +0.0347009 0.0345263 0.0343514 0.0341762 0.0340008 0.033825 0.033649 +0.0334726 0.033296 0.0331191 0.0329419 0.0327644 0.0325867 0.0324086 +0.0322303 0.0320517 0.0318729 0.0316937 0.0315143 0.0313346 0.0311547 +0.0309745 0.030794 0.0306133 0.0304322 0.030251 0.0300695 0.0298877 +0.0297056 0.0295233 0.0293408 0.029158 0.0289749 0.0287916 0.0286081 +0.0284243 0.0282402 0.0280559 0.0278714 0.0276866 0.0275016 0.0273164 +0.0271309 0.0269452 0.0267592 0.026573 0.0263866 0.0262 0.0260131 0.025826 +0.0256387 0.0254512 0.0252634 0.0250754 0.0248872 0.0246988 0.0245102 +0.0243213 0.0241323 0.023943 0.0237536 0.0235639 0.023374 0.0231839 +0.0229937 0.0228032 0.0226125 0.0224216 0.0222305 0.0220393 0.0218478 +0.0216562 0.0214643 0.0212723 0.0210801 0.0208877 0.0206951 0.0205024 +0.0203094 0.0201163 0.019923 0.0197296 0.019536 0.0193422; +#A 4000 0.0191482 0.018954 0.0187597 0.0185653 0.0183706 0.0181758 +0.0179809 0.0177858 0.0175905 0.0173951 0.0171995 0.0170038 0.0168079 +0.0166119 0.0164158 0.0162195 0.016023 0.0158264 0.0156297 0.0154328 +0.0152358 0.0150387 0.0148414 0.014644 0.0144465 0.0142489 0.0140511 +0.0138532 0.0136552 0.013457 0.0132588 0.0130604 0.0128619 0.0126633 +0.0124646 0.0122658 0.0120668 0.0118678 0.0116686 0.0114694 0.0112701 +0.0110706 0.0108711 0.0106714 0.0104717 0.0102719 0.010072 0.00987196 +0.00967187 0.0094717 0.00927144 0.0090711 0.00887068 0.00867019 0.00846961 +0.00826896 0.00806824 0.00786745 0.00766659 0.00746566 0.00726467 0.00706361 +0.00686249 0.0066613 0.00646006 0.00625877 0.00605741 0.00585601 0.00565455 +0.00545304 0.00525149 0.00504989 0.00484824 0.00464655 0.00444482 0.00424305 +0.00404125 0.0038394 0.00363753 0.00343562 0.00323368 0.00303172 0.00282972 +0.0026277 0.00242566 0.0022236 0.00202152 0.00181941 0.0016173 0.00141517 +0.00121302 0.00101087 0.000808706 0.000606536 0.00040436 0.000202181 +-2.69055e-12 -0.000202181 -0.00040436 -0.000606536 -0.000808706 -0.00101087 +-0.00121302 -0.00141517 -0.0016173 -0.00181941 -0.00202152 -0.0022236 +-0.00242566 -0.0026277 -0.00282972 -0.00303172 -0.00323368 -0.00343562 +-0.00363753 -0.0038394 -0.00404125 -0.00424305 -0.00444482 -0.00464655 +-0.00484824 -0.00504989 -0.00525149 -0.00545304 -0.00565455 -0.00585601 +-0.00605741 -0.00625877 -0.00646006 -0.0066613 -0.00686249 -0.00706361 +-0.00726467 -0.00746566 -0.00766659 -0.00786745 -0.00806824 -0.00826896 +-0.00846961 -0.00867019 -0.00887068 -0.0090711 -0.00927144 -0.0094717 +-0.00967187 -0.00987196 -0.010072 -0.0102719 -0.0104717 -0.0106714 +-0.0108711 -0.0110706 -0.0112701 -0.0114694 -0.0116686 -0.0118678 -0.0120668 +-0.0122658 -0.0124646 -0.0126633 -0.0128619 -0.0130604 -0.0132588 -0.013457 +-0.0136552 -0.0138532 -0.0140511 -0.0142489 -0.0144465 -0.014644 -0.0148414 +-0.0150387 -0.0152358 -0.0154328 -0.0156297 -0.0158264 -0.016023 -0.0162195 +-0.0164158 -0.0166119 -0.0168079 -0.0170038 -0.0171995 -0.0173951 -0.0175905 +-0.0177858 -0.0179809 -0.0181758 -0.0183706 -0.0185653 -0.0187597 -0.018954 +-0.0191482 -0.0193422 -0.019536 -0.0197296 -0.019923 -0.0201163 -0.0203094 +-0.0205024 -0.0206951 -0.0208877 -0.0210801 -0.0212723 -0.0214643 -0.0216562 +-0.0218478 -0.0220393 -0.0222305 -0.0224216 -0.0226125 -0.0228032 -0.0229937 +-0.0231839 -0.023374 -0.0235639 -0.0237536 -0.023943 -0.0241323 -0.0243213 +-0.0245102 -0.0246988 -0.0248872 -0.0250754 -0.0252634 -0.0254512 -0.0256387 +-0.025826 -0.0260131 -0.0262 -0.0263866 -0.026573 -0.0267592 -0.0269452 +-0.0271309 -0.0273164 -0.0275016 -0.0276866 -0.0278714 -0.0280559 -0.0282402 +-0.0284243 -0.0286081 -0.0287916 -0.0289749 -0.029158 -0.0293408 -0.0295233 +-0.0297056 -0.0298877 -0.0300695 -0.030251 -0.0304322 -0.0306133 -0.030794 +-0.0309745 -0.0311547 -0.0313346 -0.0315143 -0.0316937 -0.0318729 -0.0320517 +-0.0322303 -0.0324086 -0.0325867 -0.0327644 -0.0329419 -0.0331191 -0.033296 +-0.0334726 -0.033649 -0.033825 -0.0340008 -0.0341762 -0.0343514 -0.0345263 +-0.0347009 -0.0348752 -0.0350492 -0.035223 -0.0353964 -0.0355695 -0.0357423 +-0.0359148 -0.036087 -0.0362589 -0.0364304 -0.0366017 -0.0367727 -0.0369433 +-0.0371137 -0.0372837 -0.0374534 -0.0376228 -0.0377919 -0.0379606 -0.0381291 +-0.0382972 -0.038465 -0.0386325 -0.0387996 -0.0389664 -0.0391329 -0.0392991 +-0.0394649 -0.0396304 -0.0397955 -0.0399604 -0.0401249 -0.040289 -0.0404528 +-0.0406163 -0.0407795 -0.0409423 -0.0411047 -0.0412668 -0.0414286 -0.04159 +-0.0417511 -0.0419118 -0.0420722 -0.0422322 -0.0423919 -0.0425512 -0.0427102 +-0.0428688 -0.043027 -0.0431849 -0.0433424 -0.0434996 -0.0436564 -0.0438129 +-0.043969 -0.0441247 -0.04428 -0.044435 -0.0445897 -0.0447439 -0.0448978 +-0.0450513 -0.0452045 -0.0453572 -0.0455096 -0.0456617 -0.0458133 -0.0459646 +-0.0461155 -0.046266 -0.0464161 -0.0465659 -0.0467152 -0.0468642 -0.0470128 +-0.047161 -0.0473089 -0.0474563 -0.0476034 -0.04775 -0.0478963 -0.0480422 +-0.0481877 -0.0483328 -0.0484775 -0.0486218 -0.0487657 -0.0489093 -0.0490524 +-0.0491951 -0.0493374 -0.0494794 -0.0496209 -0.049762 -0.0499027 -0.050043 +-0.050183 -0.0503225 -0.0504616 -0.0506003 -0.0507385 -0.0508764 -0.0510139 +-0.051151 -0.0512876 -0.0514238 -0.0515597 -0.0516951 -0.0518301 -0.0519646 +-0.0520988 -0.0522326 -0.0523659 -0.0524988 -0.0526313 -0.0527634 -0.052895 +-0.0530263 -0.0531571 -0.0532874 -0.0534174 -0.0535469 -0.0536761 -0.0538047 +-0.053933 -0.0540609 -0.0541883 -0.0543152 -0.0544418 -0.0545679 -0.0546936 +-0.0548189 -0.0549437 -0.0550681 -0.0551921 -0.0553156 -0.0554387 -0.0555613 +-0.0556836 -0.0558054 -0.0559267 -0.0560476 -0.0561681 -0.0562882 -0.0564077 +-0.0565269 -0.0566456 -0.0567639 -0.0568817 -0.0569992 -0.0571161 -0.0572326 +-0.0573487 -0.0574643 -0.0575795 -0.0576942 -0.0578085 -0.0579224 -0.0580358 +-0.0581487 -0.0582612 -0.0583733 -0.0584849 -0.058596 -0.0587068 -0.058817 +-0.0589268 -0.0590362 -0.0591451 -0.0592536 -0.0593616 -0.0594691 -0.0595762 +-0.0596829 -0.0597891 -0.0598948 -0.0600001 -0.0601049 -0.0602093 -0.0603132 +-0.0604167 -0.0605197 -0.0606223 -0.0607244 -0.060826 -0.0609272 -0.0610279 +-0.0611282 -0.061228 -0.0613273 -0.0614262 -0.0615246 -0.0616226 -0.0617201 +-0.0618172 -0.0619138 -0.0620099 -0.0621056 -0.0622008 -0.0622955 -0.0623898 +-0.0624836 -0.062577 -0.0626699 -0.0627623 -0.0628543 -0.0629458 -0.0630369 +-0.0631275 -0.0632176 -0.0633073 -0.0633964 -0.0634852 -0.0635734 -0.0636612 +-0.0637486 -0.0638355 -0.0639219 -0.0640078 -0.0640933 -0.0641783 -0.0642629 +-0.064347 -0.0644306 -0.0645137 -0.0645964 -0.0646786 -0.0647604 -0.0648417 +-0.0649225 -0.0650029 -0.0650828 -0.0651622 -0.0652412 -0.0653197 -0.0653977 +-0.0654752 -0.0655523 -0.065629 -0.0657051 -0.0657808 -0.0658561 -0.0659309 +-0.0660051 -0.066079 -0.0661523 -0.0662253 -0.0662977 -0.0663697 -0.0664412 +-0.0665122 -0.0665828 -0.0666529 -0.0667225 -0.0667917 -0.0668604 -0.0669287 +-0.0669965 -0.0670638 -0.0671306 -0.067197 -0.067263 -0.0673284 -0.0673934 +-0.0674579 -0.067522 -0.0675856 -0.0676487 -0.0677114 -0.0677736 -0.0678353 +-0.0678966 -0.0679575 -0.0680178 -0.0680777 -0.0681372 -0.0681961 -0.0682546 +-0.0683127 -0.0683702 -0.0684274 -0.068484 -0.0685403 -0.068596 -0.0686513 +-0.0687061 -0.0687605 -0.0688144 -0.0688678 -0.0689208 -0.0689733 -0.0690254 +-0.069077 -0.0691281 -0.0691788 -0.0692291 -0.0692788 -0.0693282 -0.069377 +-0.0694254 -0.0694734 -0.0695209 -0.0695679 -0.0696145 -0.0696606 -0.0697063 +-0.0697516 -0.0697963 -0.0698407 -0.0698845 -0.0699279 -0.0699709 -0.0700134 +-0.0700555 -0.0700971 -0.0701382 -0.070179 -0.0702192 -0.070259 -0.0702984 +-0.0703373 -0.0703758 -0.0704138 -0.0704514 -0.0704885 -0.0705252 -0.0705614 +-0.0705972 -0.0706326 -0.0706675 -0.070702 -0.070736 -0.0707695 -0.0708027 +-0.0708354 -0.0708676 -0.0708994 -0.0709308 -0.0709617 -0.0709923 -0.0710223 +-0.0710519 -0.0710811 -0.0711099 -0.0711382 -0.071166 -0.0711935 -0.0712205 +-0.071247 -0.0712732 -0.0712989 -0.0713241 -0.071349 -0.0713734 -0.0713973 +-0.0714209 -0.071444 -0.0714667 -0.071489 -0.0715108 -0.0715322 -0.0715532 +-0.0715737 -0.0715939 -0.0716136 -0.0716328 -0.0716517 -0.0716701 -0.0716881 +-0.0717057 -0.0717229 -0.0717396 -0.071756 -0.0717719 -0.0717874 -0.0718024 +-0.0718171 -0.0718313 -0.0718452 -0.0718586 -0.0718716 -0.0718841 -0.0718963 +-0.0719081 -0.0719194 -0.0719304 -0.0719409 -0.071951 -0.0719607 -0.07197 +-0.0719789 -0.0719874 -0.0719955 -0.0720031 -0.0720104 -0.0720173 -0.0720238 +-0.0720298 -0.0720355 -0.0720407 -0.0720456 -0.0720501 -0.0720541 -0.0720578 +-0.0720611 -0.072064 -0.0720664 -0.0720685 -0.0720702 -0.0720715 -0.0720724 +-0.072073 -0.0720731 -0.0720728 -0.0720721 -0.0720711 -0.0720697 -0.0720679 +-0.0720657 -0.0720631 -0.0720601 -0.0720568 -0.072053 -0.0720489 -0.0720444 +-0.0720395 -0.0720343 -0.0720286 -0.0720226 -0.0720162 -0.0720095 -0.0720023 +-0.0719948 -0.0719869 -0.0719787 -0.07197 -0.071961 -0.0719516 -0.0719419 +-0.0719318 -0.0719213 -0.0719104 -0.0718993 -0.0718877 -0.0718757 -0.0718634 +-0.0718507 -0.0718377 -0.0718243 -0.0718106 -0.0717965 -0.071782 -0.0717672 +-0.071752 -0.0717365 -0.0717206 -0.0717043 -0.0716877 -0.0716708 -0.0716535 +-0.0716358 -0.0716178 -0.0715995 -0.0715808 -0.0715617 -0.0715424 -0.0715226 +-0.0715026 -0.0714821 -0.0714614 -0.0714403 -0.0714188 -0.071397 -0.0713749 +-0.0713525 -0.0713297 -0.0713065 -0.0712831 -0.0712593 -0.0712351 -0.0712107 +-0.0711859 -0.0711608 -0.0711353 -0.0711095 -0.0710834 -0.071057 -0.0710302 +-0.0710031 -0.0709757 -0.070948 -0.0709199 -0.0708916 -0.0708629 -0.0708338 +-0.0708045 -0.0707748 -0.0707449 -0.0707146 -0.070684 -0.0706531 -0.0706219 +-0.0705903 -0.0705585 -0.0705263 -0.0704938 -0.0704611 -0.070428 -0.0703946 +-0.0703609 -0.0703269 -0.0702926 -0.070258 -0.0702231 -0.0701879 -0.0701524 +-0.0701166 -0.0700805 -0.0700441 -0.0700074 -0.0699704 -0.0699331 -0.0698955 +-0.0698577 -0.0698195 -0.069781 -0.0697423 -0.0697033 -0.0696639 -0.0696243 +-0.0695844 -0.0695443 -0.0695038 -0.0694631 -0.069422 -0.0693807 -0.0693391 +-0.0692973 -0.0692551 -0.0692127 -0.06917 -0.069127 -0.0690838 -0.0690403 +-0.0689965 -0.0689524 -0.0689081 -0.0688635 -0.0688186 -0.0687734 -0.068728 +-0.0686823 -0.0686364 -0.0685902 -0.0685437 -0.068497 -0.06845 -0.0684027 +-0.0683552 -0.0683074 -0.0682594 -0.0682111 -0.0681625 -0.0681137 -0.0680647 +-0.0680153 -0.0679658 -0.0679159 -0.0678658 -0.0678155 -0.067765 -0.0677141 +-0.0676631 -0.0676118 -0.0675602 -0.0675084 -0.0674563 -0.067404 -0.0673515 +-0.0672987 -0.0672457 -0.0671924 -0.0671389 -0.0670852 -0.0670312 -0.066977 +-0.0669225 -0.0668679 -0.066813 -0.0667578 -0.0667024 -0.0666468 -0.066591 +-0.0665349 -0.0664786 -0.0664221 -0.0663653 -0.0663084 -0.0662511 -0.0661937 +-0.066136 -0.0660782 -0.0660201 -0.0659618 -0.0659032 -0.0658444 -0.0657855 +-0.0657263 -0.0656668 -0.0656072 -0.0655474 -0.0654873 -0.065427 -0.0653665 +-0.0653058 -0.0652449 -0.0651838 -0.0651225 -0.0650609 -0.0649991 -0.0649372 +-0.064875 -0.0648126 -0.0647501 -0.0646873 -0.0646243 -0.0645611 -0.0644977 +-0.0644341 -0.0643703 -0.0643063 -0.0642421 -0.0641777 -0.0641131 -0.0640483 +-0.0639833 -0.0639182 -0.0638528 -0.0637872 -0.0637214 -0.0636555 -0.0635893 +-0.063523 -0.0634564 -0.0633897 -0.0633228 -0.0632557 -0.0631884 -0.0631209 +-0.0630533 -0.0629854 -0.0629174 -0.0628491 -0.0627807 -0.0627121 -0.0626434 +-0.0625744 -0.0625053 -0.062436 -0.0623665 -0.0622968 -0.0622269 -0.0621569 +-0.0620867 -0.0620163 -0.0619457 -0.061875 -0.0618041 -0.061733 -0.0616617 +-0.0615903 -0.0615187 -0.0614469 -0.0613749 -0.0613028 -0.0612305 -0.061158 +-0.0610854 -0.0610126 -0.0609396 -0.0608665 -0.0607932 -0.0607197 -0.060646 +-0.0605722 -0.0604982 -0.0604241 -0.0603498 -0.0602753 -0.0602007 -0.0601259 +-0.060051 -0.0599759 -0.0599006 -0.0598251 -0.0597496 -0.0596738 -0.0595979 +-0.0595218 -0.0594456 -0.0593692 -0.0592927 -0.059216 -0.0591391 -0.0590621 +-0.0589849 -0.0589076 -0.0588301 -0.0587525 -0.0586747 -0.0585968 -0.0585187 +-0.0584404 -0.058362 -0.0582835 -0.0582048 -0.0581259 -0.0580469 -0.0579678 +-0.0578885 -0.057809 -0.0577294; +#A 5000 -0.0576497 -0.0575698 -0.0574897 -0.0574095 -0.0573292 -0.0572487 +-0.0571681 -0.0570873 -0.0570064 -0.0569253 -0.0568441 -0.0567627 -0.0566812 +-0.0565996 -0.0565178 -0.0564359 -0.0563538 -0.0562716 -0.0561892 -0.0561067 +-0.056024 -0.0559412 -0.0558583 -0.0557752 -0.055692 -0.0556086 -0.0555251 +-0.0554415 -0.0553577 -0.0552738 -0.0551897 -0.0551055 -0.0550211 -0.0549367 +-0.054852 -0.0547673 -0.0546824 -0.0545973 -0.0545121 -0.0544268 -0.0543413 +-0.0542558 -0.05417 -0.0540841 -0.0539981 -0.053912 -0.0538257 -0.0537392 +-0.0536527 -0.053566 -0.0534791 -0.0533921 -0.053305 -0.0532178 -0.0531304 +-0.0530428 -0.0529552 -0.0528674 -0.0527794 -0.0526913 -0.0526031 -0.0525148 +-0.0524263 -0.0523376 -0.0522489 -0.05216 -0.0520709 -0.0519817 -0.0518924 +-0.051803 -0.0517134 -0.0516237 -0.0515338 -0.0514438 -0.0513537 -0.0512634 +-0.051173 -0.0510824 -0.0509917 -0.0509009 -0.0508099 -0.0507188 -0.0506276 +-0.0505362 -0.0504447 -0.050353 -0.0502612 -0.0501693 -0.0500772 -0.049985 +-0.0498926 -0.0498001 -0.0497075 -0.0496147 -0.0495218 -0.0494288 -0.0493356 +-0.0492422 -0.0491487 -0.0490552 -0.0489614 -0.0488675 -0.0487734 -0.0486793 +-0.0485849 -0.0484905 -0.0483959 -0.0483011 -0.0482062 -0.0481112 -0.048016 +-0.0479207 -0.0478252 -0.0477296 -0.0476338 -0.0475379 -0.0474418 -0.0473456 +-0.0472493 -0.0471528 -0.0470562 -0.0469594 -0.0468625 -0.0467654 -0.0466681 +-0.0465708 -0.0464732 -0.0463756 -0.0462777 -0.0461798 -0.0460816 -0.0459834 +-0.0458849 -0.0457863 -0.0456876 -0.0455887 -0.0454897 -0.0453905 -0.0452911 +-0.0451916 -0.045092 -0.0449922 -0.0448922 -0.0447921 -0.0446918 -0.0445913 +-0.0444907 -0.04439 -0.0442891 -0.044188 -0.0440868 -0.0439854 -0.0438838 +-0.0437821 -0.0436802 -0.0435781 -0.0434759 -0.0433736 -0.043271 -0.0431683 +-0.0430655 -0.0429624 -0.0428592 -0.0427559 -0.0426523 -0.0425486 -0.0424448 +-0.0423407 -0.0422365 -0.0421321 -0.0420276 -0.0419228 -0.0418179 -0.0417129 +-0.0416076 -0.0415022 -0.0413966 -0.0412908 -0.0411848 -0.0410787 -0.0409724 +-0.0408659 -0.0407592 -0.0406524 -0.0405453 -0.0404381 -0.0403307 -0.0402231 +-0.0401154 -0.0400074 -0.0398993 -0.039791 -0.0396824 -0.0395737 -0.0394648 +-0.0393558 -0.0392465 -0.039137 -0.0390274 -0.0389175 -0.0388075 -0.0386972 +-0.0385868 -0.0384762 -0.0383654 -0.0382543 -0.0381431 -0.0380317 -0.0379201 +-0.0378082 -0.0376962 -0.037584 -0.0374715 -0.0373589 -0.037246 -0.037133 +-0.0370197 -0.0369063 -0.0367926 -0.0366787 -0.0365646 -0.0364503 -0.0363357 +-0.036221 -0.036106 -0.0359908 -0.0358755 -0.0357598 -0.035644 -0.035528 +-0.0354117 -0.0352952 -0.0351785 -0.0350615 -0.0349444 -0.034827 -0.0347093 +-0.0345915 -0.0344734 -0.0343551 -0.0342365 -0.0341178 -0.0339988 -0.0338795 +-0.0337601 -0.0336403 -0.0335204 -0.0334002 -0.0332798 -0.0331591 -0.0330382 +-0.032917 -0.0327956 -0.032674 -0.0325521 -0.0324299 -0.0323076 -0.0321849 +-0.032062 -0.0319389 -0.0318155 -0.0316919 -0.0315679 -0.0314438 -0.0313194 +-0.0311947 -0.0310698 -0.0309445 -0.0308191 -0.0306934 -0.0305674 -0.0304411 +-0.0303146 -0.0301878 -0.0300607 -0.0299334 -0.0298058 -0.0296779 -0.0295498 +-0.0294214 -0.0292926 -0.0291637 -0.0290344 -0.0289049 -0.028775 -0.0286449 +-0.0285145 -0.0283839 -0.0282529 -0.0281216 -0.0279901 -0.0278583 -0.0277261 +-0.0275937 -0.027461 -0.027328 -0.0271947 -0.0270611 -0.0269272 -0.026793 +-0.0266585 -0.0265237 -0.0263886 -0.0262532 -0.0261175 -0.0259814 -0.0258451 +-0.0257084 -0.0255715 -0.0254342 -0.0252966 -0.0251587 -0.0250204 -0.0248819 +-0.024743 -0.0246038 -0.0244643 -0.0243245 -0.0241843 -0.0240438 -0.023903 +-0.0237618 -0.0236203 -0.0234785 -0.0233364 -0.0231939 -0.0230511 -0.0229079 +-0.0227644 -0.0226206 -0.0224764 -0.0223318 -0.022187 -0.0220417 -0.0218962 +-0.0217503 -0.021604 -0.0214574 -0.0213104 -0.021163 -0.0210153 -0.0208673 +-0.0207189 -0.0205701 -0.020421 -0.0202715 -0.0201216 -0.0199714 -0.0198208 +-0.0196698 -0.0195185 -0.0193668 -0.0192147 -0.0190622 -0.0189094 -0.0187562 +-0.0186026 -0.0184486 -0.0182943 -0.0181395 -0.0179844 -0.0178289 -0.017673 +-0.0175167 -0.01736 -0.0172029 -0.0170455 -0.0168876 -0.0167293 -0.0165707 +-0.0164116 -0.0162521 -0.0160923 -0.015932 -0.0157713 -0.0156102 -0.0154487 +-0.0152868 -0.0151245 -0.0149617 -0.0147986 -0.014635 -0.014471 -0.0143066 +-0.0141418 -0.0139766 -0.0138109 -0.0136448 -0.0134783 -0.0133113 -0.0131439 +-0.0129761 -0.0128079 -0.0126392 -0.0124701 -0.0123005 -0.0121305 -0.0119601 +-0.0117892 -0.0116179 -0.0114461 -0.0112739 -0.0111012 -0.0109281 -0.0107546 +-0.0105806 -0.0104061 -0.0102312 -0.0100558 -0.00987995 -0.00970364 +-0.00952689 -0.00934966 -0.00917198 -0.00899382 -0.00881518 -0.0086361 +-0.00845654 -0.00827651 -0.00809601 -0.00791502 -0.00773356 -0.00755162 +-0.00736919 -0.0071863 -0.00700291 -0.00681906 -0.00663471 -0.00644987 +-0.00626455 -0.00607872 -0.00589241 -0.00570561 -0.00551832 -0.00533054 +-0.00514224 -0.00495345 -0.00476416 -0.00457438 -0.00438408 -0.0041933 +-0.00400199 -0.00381017 -0.00361785 -0.00342502 -0.00323169 -0.00303783 +-0.00284346 -0.00264857 -0.00245315 -0.00225723 -0.00206079 -0.00186383 +-0.00166633 -0.00146832 -0.00126976 -0.00107069 -0.000871101 -0.000670969 +-0.000470301 -0.000269102 -6.73617e-05 0.000134914 0.00033771 0.000541066 +0.00074496 0.00094938 0.00115436 0.00135988 0.00156595 0.00177256 0.00197973 +0.00218744 0.00239571 0.00260454 0.00281391 0.00302386 0.00323433 0.00344538 +0.003657 0.00386917 0.00408192 0.00429521 0.00450907 0.00472352 0.00493852 +0.00515408 0.00537023 0.00558695 0.00580423 0.00602211 0.00624055 0.00645957 +0.00667918 0.00689937 0.00712013 0.00734148 0.00756341 0.00778593 0.00800903 +0.00823273 0.00845702 0.00868189 0.00890737 0.00913343 0.0093601 0.00958733 +0.00981519 0.0100437 0.0102727 0.0105023 0.0107326 0.0109635 0.0111949 +0.011427 0.0116597 0.011893 0.0121269 0.0123614 0.0125965 0.0128323 +0.0130686 0.0133056 0.0135432 0.0137814 0.0140202 0.0142596 0.0144997 +0.0147404 0.0149817 0.0152236 0.0154662 0.0157094 0.0159532 0.0161977 +0.0164428 0.0166885 0.0169348 0.0171818 0.0174294 0.0176777 0.0179266 +0.0181761 0.0184263 0.0186771 0.0189286 0.0191807 0.0194334 0.0196868 +0.0199409 0.0201956 0.0204509 0.0207069 0.0209635 0.0212208 0.0214787 +0.0217373 0.0219966 0.0222565 0.022517 0.0227782 0.0230401 0.0233027 +0.0235659 0.0238297 0.0240942 0.0243594 0.0246252 0.0248917 0.0251589 +0.0254268 0.0256953 0.0259644 0.0262343 0.0265048 0.026776 0.0270479 +0.0273204 0.0275936 0.0278675 0.028142 0.0284172 0.0286932 0.0289697 +0.029247 0.0295249 0.0298036 0.0300829 0.0303629 0.0306435 0.0309249 +0.0312069 0.0314896 0.031773 0.0320571 0.0323419 0.0326274 0.0329135 +0.0332003 0.0334878 0.0337761 0.034065 0.0343546 0.0346448 0.0349358 +0.0352275 0.0355199 0.0358129 0.0361067 0.0364011 0.0366963 0.0369921 +0.0372886 0.0375859 0.0378838 0.0381824 0.0384818 0.0387818 0.0390825 +0.0393839 0.0396861 0.0399889 0.0402924 0.0405966 0.0409016 0.0412072 +0.0415136 0.0418206 0.0421284 0.0424368 0.042746 0.0430558 0.0433664 +0.0436777 0.0439897 0.0443023 0.0446157 0.0449298 0.0452446 0.0455601 +0.0458763 0.0461933 0.0465109 0.0468293 0.0471483 0.0474681 0.0477886 +0.0481097 0.0484316 0.0487542 0.0490775 0.0494015 0.0497262 0.0500517 +0.0503778 0.0507047 0.0510323 0.0513605 0.0516895 0.0520192 0.0523496 +0.0526808 0.0530126 0.0533451 0.0536784 0.0540123 0.054347 0.0546824 +0.0550185 0.0553553 0.0556928 0.056031 0.0563699 0.0567096 0.0570499 +0.057391 0.0577328 0.0580752 0.0584184 0.0587623 0.0591069 0.0594522 +0.0597983 0.060145 0.0604924 0.0608406 0.0611894 0.061539 0.0618892 +0.0622402 0.0625919 0.0629443 0.0632973 0.0636512 0.0640056 0.0643609 +0.0647167 0.0650734 0.0654307 0.0657887 0.0661474 0.0665068 0.0668669 +0.0672278 0.0675893 0.0679515 0.0683144 0.068678 0.0690423 0.0694073 +0.069773 0.0701394 0.0705065 0.0708743 0.0712428 0.071612 0.0719818 +0.0723524 0.0727237 0.0730956 0.0734682 0.0738416 0.0742156 0.0745903 +0.0749657 0.0753417 0.0757185 0.0760959 0.0764741 0.0768529 0.0772324 +0.0776125 0.0779934 0.0783749 0.0787571 0.07914 0.0795236 0.0799078 +0.0802927 0.0806783 0.0810646 0.0814515 0.0818391 0.0822274 0.0826163 +0.0830059 0.0833962 0.0837871 0.0841787 0.084571 0.0849639 0.0853575 +0.0857518 0.0861467 0.0865422 0.0869384 0.0873353 0.0877329 0.088131 +0.0885299 0.0889293 0.0893295 0.0897302 0.0901317 0.0905337 0.0909364 +0.0913398 0.0917437 0.0921484 0.0925536 0.0929595 0.0933661 0.0937732 +0.094181 0.0945894 0.0949985 0.0954082 0.0958185 0.0962294 0.096641 +0.0970532 0.0974659 0.0978793 0.0982934 0.098708 0.0991233 0.0995391 +0.0999556 0.100373 0.10079 0.101209 0.101628 0.102047 0.102467 0.102888 +0.103309 0.103731 0.104153 0.104576 0.105 0.105424 0.105849 0.106274 +0.1067 0.107127 0.107554 0.107982 0.10841 0.108839 0.109268 0.109698 +0.110129 0.11056 0.110992 0.111424 0.111857 0.11229 0.112724 0.113158 +0.113593 0.114029 0.114465 0.114901 0.115338 0.115776 0.116214 0.116653 +0.117092 0.117532 0.117972 0.118413 0.118854 0.119296 0.119739 0.120181 +0.120625 0.121069 0.121513 0.121958 0.122403 0.122849 0.123296 0.123743 +0.12419 0.124638 0.125086 0.125535 0.125984 0.126434 0.126884 0.127335 +0.127786 0.128238 0.12869 0.129142 0.129595 0.130049 0.130503 0.130957 +0.131412 0.131867 0.132323 0.132779 0.133236 0.133693 0.13415 0.134608 +0.135066 0.135525 0.135984 0.136444 0.136903 0.137364 0.137825 0.138286 +0.138747 0.139209 0.139671 0.140134 0.140597 0.141061 0.141525 0.141989 +0.142453 0.142918 0.143384 0.143849 0.144315 0.144782 0.145249 0.145716 +0.146183 0.146651 0.147119 0.147587 0.148056 0.148525 0.148995 0.149465 +0.149935 0.150405 0.150876 0.151347 0.151818 0.15229 0.152762 0.153234 +0.153706 0.154179 0.154652 0.155125 0.155599 0.156073 0.156547 0.157021 +0.157496 0.157971 0.158446 0.158922 0.159397 0.159873 0.160349 0.160826 +0.161302 0.161779 0.162256 0.162733 0.163211 0.163689 0.164166 0.164645 +0.165123 0.165601 0.16608 0.166559 0.167038 0.167517 0.167997 0.168476 +0.168956 0.169436 0.169916 0.170396 0.170876 0.171357 0.171837 0.172318 +0.172799 0.17328 0.173761 0.174242 0.174724 0.175205 0.175687 0.176168 +0.17665 0.177132 0.177614 0.178096 0.178578 0.17906 0.179542 0.180025 +0.180507 0.180989 0.181472 0.181954 0.182437 0.18292 0.183402 0.183885 +0.184368 0.18485 0.185333 0.185816 0.186298 0.186781 0.187264 0.187747 +0.188229 0.188712 0.189195 0.189677 0.19016 0.190642 0.191125 0.191607 +0.19209 0.192572 0.193054 0.193537 0.194019 0.194501 0.194983 0.195465 +0.195946 0.196428 0.19691 0.197391 0.197873; +#A 6000 0.198354 0.198835 0.199316 0.199797 0.200278 0.200758 0.201239 +0.201719 0.202199 0.202679 0.203159 0.203639 0.204118 0.204597 0.205076 +0.205555 0.206034 0.206512 0.206991 0.207469 0.207946 0.208424 0.208901 +0.209378 0.209855 0.210332 0.210808 0.211284 0.21176 0.212236 0.212711 +0.213186 0.213661 0.214135 0.214609 0.215083 0.215557 0.21603 0.216503 +0.216975 0.217448 0.21792 0.218391 0.218862 0.219333 0.219804 0.220274 +0.220744 0.221213 0.221682 0.22215 0.222619 0.223086 0.223554 0.224021 +0.224487 0.224954 0.225419 0.225885 0.226349 0.226814 0.227278 0.227741 +0.228204 0.228667 0.229129 0.22959 0.230051 0.230512 0.230972 0.231432 +0.231891 0.232349 0.232807 0.233265 0.233722 0.234178 0.234634 0.23509 +0.235544 0.235998 0.236452 0.236905 0.237358 0.23781 0.238261 0.238711 +0.239162 0.239611 0.24006 0.240508 0.240956 0.241403 0.241849 0.242294 +0.242739 0.243184 0.243627 0.24407 0.244513 0.244954 0.245395 0.245835 +0.246275 0.246713 0.247151 0.247589 0.248025 0.248461 0.248896 0.249331 +0.249764 0.250197 0.250629 0.25106 0.251491 0.25192 0.252349 0.252777 +0.253205 0.253631 0.254057 0.254481 0.254905 0.255329 0.255751 0.256172 +0.256593 0.257012 0.257431 0.257849 0.258266 0.258682 0.259097 0.259512 +0.259925 0.260338 0.260749 0.26116 0.261569 0.261978 0.262386 0.262793 +0.263199 0.263603 0.264007 0.26441 0.264812 0.265213 0.265613 0.266012 +0.266409 0.266806 0.267202 0.267597 0.267991 0.268383 0.268775 0.269165 +0.269555 0.269943 0.27033 0.270716 0.271101 0.271485 0.271868 0.27225 +0.27263 0.27301 0.273388 0.273765 0.274141 0.274516 0.27489 0.275262 +0.275633 0.276004 0.276372 0.27674 0.277107 0.277472 0.277836 0.278199 +0.27856 0.278921 0.27928 0.279637 0.279994 0.280349 0.280703 0.281056 +0.281407 0.281757 0.282106 0.282454 0.2828 0.283145 0.283488 0.28383 +0.284171 0.28451 0.284848 0.285185 0.28552 0.285854 0.286187 0.286518 +0.286848 0.287176 0.287503 0.287829 0.288153 0.288475 0.288796 0.289116 +0.289434 0.289751 0.290066 0.29038 0.290693 0.291003 0.291313 0.291621 +0.291927 0.292232 0.292535 0.292837 0.293137 0.293436 0.293733 0.294028 +0.294322 0.294614 0.294905 0.295194 0.295482 0.295768 0.296052 0.296335 +0.296616 0.296896 0.297173 0.29745 0.297724 0.297997 0.298268 0.298538 +0.298806 0.299072 0.299336 0.299599 0.29986 0.300119 0.300377 0.300633 +0.300887 0.301139 0.30139 0.301639 0.301886 0.302131 0.302375 0.302617 +0.302856 0.303095 0.303331 0.303566 0.303798 0.304029 0.304258 0.304485 +0.304711 0.304934 0.305156 0.305376 0.305594 0.30581 0.306024 0.306236 +0.306446 0.306655 0.306861 0.307066 0.307268 0.307469 0.307668 0.307865 +0.308059 0.308252 0.308443 0.308632 0.308819 0.309004 0.309187 0.309368 +0.309547 0.309724 0.309898 0.310071 0.310242 0.310411 0.310577 0.310742 +0.310905 0.311065 0.311224 0.31138 0.311534 0.311686 0.311836 0.311984 +0.31213 0.312274 0.312415 0.312554 0.312692 0.312827 0.31296 0.31309 +0.313219 0.313345 0.313469 0.313592 0.313711 0.313829 0.313944 0.314057 +0.314168 0.314277 0.314384 0.314488 0.31459 0.314689 0.314787 0.314882 +0.314975 0.315065 0.315154 0.31524 0.315323 0.315405 0.315484 0.315561 +0.315635 0.315707 0.315777 0.315844 0.315909 0.315972 0.316032 0.31609 +0.316146 0.316199 0.316249 0.316298 0.316344 0.316387 0.316428 0.316467 +0.316503 0.316537 0.316568 0.316597 0.316624 0.316648 0.316669 0.316688 +0.316705 0.316719 0.316731 0.31674 0.316746 0.31675 0.316752 0.316751 +0.316747 0.316741 0.316733 0.316722 0.316708 0.316692 0.316673 0.316651 +0.316628 0.316601 0.316572 0.31654 0.316506 0.316469 0.316429 0.316387 +0.316342 0.316295 0.316245 0.316192 0.316137 0.316079 0.316018 0.315955 +0.315889 0.31582 0.315749 0.315675 0.315598 0.315518 0.315436 0.315351 +0.315264 0.315173 0.31508 0.314985 0.314886 0.314785 0.314681 0.314574 +0.314465 0.314352 0.314237 0.314119 0.313999 0.313875 0.313749 0.31362 +0.313488 0.313354 0.313216 0.313076 0.312933 0.312787 0.312639 0.312487 +0.312333 0.312175 0.312015 0.311852 0.311686 0.311518 0.311346 0.311172 +0.310994 0.310814 0.310631 0.310445 0.310256 0.310064 0.309869 0.309672 +0.309471 0.309268 0.309061 0.308852 0.308639 0.308424 0.308206 0.307985 +0.307761 0.307533 0.307303 0.30707 0.306834 0.306595 0.306353 0.306108 +0.30586 0.305609 0.305355 0.305098 0.304838 0.304575 0.304308 0.304039 +0.303767 0.303492 0.303214 0.302932 0.302648 0.30236 0.30207 0.301776 +0.30148 0.30118 0.300877 0.300571 0.300262 0.29995 0.299635 0.299317 +0.298996 0.298671 0.298344 0.298013 0.297679 0.297342 0.297002 0.296659 +0.296313 0.295963 0.295611 0.295255 0.294896 0.294534 0.294169 0.293801 +0.293429 0.293055 0.292677 0.292296 0.291912 0.291524 0.291134 0.29074 +0.290343 0.289943 0.28954 0.289133 0.288724 0.288311 0.287895 0.287475 +0.287053 0.286627 0.286198 0.285766 0.28533 0.284892 0.28445 0.284005 +0.283556 0.283105 0.28265 0.282191 0.28173 0.281265 0.280798 0.280326 +0.279852 0.279374 0.278893 0.278409 0.277922 0.277431 0.276937 0.276439 +0.275939 0.275435 0.274928 0.274417 0.273903 0.273386 0.272866 0.272342 +0.271815 0.271285 0.270751 0.270214 0.269674 0.26913 0.268583 0.268033 +0.26748 0.266923 0.266363 0.265799 0.265232 0.264662 0.264089 0.263512 +0.262932 0.262348 0.261761 0.261171 0.260577 0.25998 0.25938 0.258777 +0.25817 0.257559 0.256946 0.256329 0.255708 0.255084 0.254457 0.253827 +0.253193 0.252556 0.251915 0.251271 0.250624 0.249973 0.249319 0.248662 +0.248001 0.247337 0.246669 0.245999 0.245324 0.244647 0.243965 0.243281 +0.242593 0.241902 0.241207 0.240509 0.239808 0.239103 0.238395 0.237684 +0.236969 0.23625 0.235529 0.234804 0.234075 0.233343 0.232608 0.231869 +0.231127 0.230382 0.229633 0.228881 0.228125 0.227366 0.226604 0.225838 +0.225069 0.224296 0.22352 0.222741 0.221958 0.221172 0.220382 0.219589 +0.218793 0.217993 0.21719 0.216383 0.215573 0.21476 0.213943 0.213123 +0.2123 0.211473 0.210643 0.209809 0.208972 0.208131 0.207288 0.20644 +0.20559 0.204736 0.203878 0.203017 0.202153 0.201286 0.200415 0.19954 +0.198663 0.197782 0.196897 0.196009 0.195118 0.194224 0.193326 0.192424 +0.19152 0.190611 0.1897 0.188785 0.187867 0.186945 0.18602 0.185092 +0.184161 0.183226 0.182287 0.181345 0.1804 0.179452 0.1785 0.177545 +0.176586 0.175625 0.174659 0.173691 0.172719 0.171744 0.170765 0.169784 +0.168798 0.16781 0.166818 0.165823 0.164824 0.163822 0.162817 0.161809 +0.160797 0.159782 0.158763 0.157742 0.156717 0.155688 0.154657 0.153622 +0.152583 0.151542 0.150497 0.149449 0.148398 0.147343 0.146285 0.145224 +0.144159 0.143092 0.142021 0.140946 0.139869 0.138788 0.137704 0.136616 +0.135526 0.134432 0.133335 0.132235 0.131131 0.130024 0.128914 0.127801 +0.126685 0.125565 0.124442 0.123316 0.122187 0.121054 0.119919 0.11878 +0.117638 0.116492 0.115344 0.114192 0.113037 0.111879 0.110718 0.109554 +0.108386 0.107216 0.106042 0.104865 0.103685 0.102502 0.101315 0.100126 +0.0989332 0.0977375 0.0965386 0.0953366 0.0941315 0.0929233 0.091712 +0.0904976 0.0892801 0.0880595 0.0868359 0.0856092 0.0843793 0.0831465 +0.0819105 0.0806716 0.0794295 0.0781844 0.0769363 0.0756851 0.0744309 +0.0731736 0.0719134 0.0706501 0.0693838 0.0681145 0.0668423 0.065567 +0.0642887 0.0630074 0.0617231 0.0604359 0.0591457 0.0578526 0.0565565 +0.0552574 0.0539554 0.0526504 0.0513425 0.0500317 0.048718 0.0474013 +0.0460817 0.0447593 0.0434339 0.0421056 0.0407745 0.0394404 0.0381035 +0.0367637 0.035421 0.0340756 0.0327272 0.031376 0.030022 0.0286651 +0.0273054 0.0259428 0.0245775 0.0232094 0.0218384 0.0204647 0.0190882 +0.0177089 0.0163268 0.014942 0.0135544 0.012164 0.0107709 0.0093751 +0.00797651 0.00657521 0.00517121 0.00376449 0.00235504 0.00094293 -0.000471906 +-0.0018894 -0.00330959 -0.00473244 -0.00615795 -0.00758612 -0.00901695 +-0.0104504 -0.0118865 -0.0133252 -0.0147665 -0.0162105 -0.017657 -0.0191061 +-0.0205579 -0.0220122 -0.023469 -0.0249285 -0.0263905 -0.027855 -0.0293221 +-0.0307917 -0.0322639 -0.0337386 -0.0352157 -0.0366954 -0.0381776 -0.0396623 +-0.0411494 -0.042639 -0.0441311 -0.0456256 -0.0471225 -0.048622 -0.0501238 +-0.051628 -0.0531347 -0.0546438 -0.0561552 -0.0576691 -0.0591853 -0.0607039 +-0.0622248 -0.0637482 -0.0652738 -0.0668018 -0.0683321 -0.0698647 -0.0713997 +-0.0729369 -0.0744765 -0.0760183 -0.0775624 -0.0791087 -0.0806573 -0.0822082 +-0.0837613 -0.0853166 -0.0868741 -0.0884339 -0.0899959 -0.09156 -0.0931263 +-0.0946949 -0.0962655 -0.0978384 -0.0994133 -0.10099 -0.10257 -0.104151 +-0.105734 -0.10732 -0.108908 -0.110497 -0.112089 -0.113683 -0.115279 +-0.116877 -0.118477 -0.120079 -0.121683 -0.123289 -0.124897 -0.126507 +-0.128119 -0.129733 -0.131349 -0.132966 -0.134586 -0.136208 -0.137831 +-0.139457 -0.141084 -0.142714 -0.144345 -0.145978 -0.147613 -0.149249 +-0.150888 -0.152528 -0.15417 -0.155814 -0.15746 -0.159107 -0.160757 +-0.162408 -0.16406 -0.165715 -0.167371 -0.169029 -0.170689 -0.17235 +-0.174013 -0.175678 -0.177344 -0.179012 -0.180682 -0.182353 -0.184026 +-0.1857 -0.187376 -0.189054 -0.190733 -0.192414 -0.194096 -0.19578 +-0.197466 -0.199153 -0.200841 -0.202531 -0.204222 -0.205915 -0.20761 +-0.209305 -0.211003 -0.212701 -0.214401 -0.216103 -0.217806 -0.21951 +-0.221215 -0.222922 -0.224631 -0.22634 -0.228051 -0.229764 -0.231477 +-0.233192 -0.234908 -0.236626 -0.238344 -0.240064 -0.241785 -0.243507 +-0.245231 -0.246956 -0.248682 -0.250409 -0.252137 -0.253866 -0.255597 +-0.257328 -0.259061 -0.260795 -0.26253 -0.264266 -0.266003 -0.267741 +-0.26948 -0.27122 -0.272961 -0.274703 -0.276446; +#A 7000 -0.27819 -0.279935 -0.281681 -0.283428 -0.285176 -0.286925 +-0.288674 -0.290425 -0.292176 -0.293928 -0.295682 -0.297435 -0.29919 +-0.300946 -0.302702 -0.304459 -0.306217 -0.307976 -0.309735 -0.311495 +-0.313256 -0.315018 -0.31678 -0.318543 -0.320306 -0.32207 -0.323835 +-0.325601 -0.327367 -0.329134 -0.330901 -0.332669 -0.334437 -0.336206 +-0.337976 -0.339746 -0.341516 -0.343287 -0.345059 -0.346831 -0.348603 +-0.350376 -0.352149 -0.353923 -0.355697 -0.357472 -0.359246 -0.361022 +-0.362797 -0.364573 -0.36635 -0.368126 -0.369903 -0.37168 -0.373457 +-0.375235 -0.377013 -0.378791 -0.380569 -0.382348 -0.384127 -0.385905 +-0.387685 -0.389464 -0.391243 -0.393022 -0.394802 -0.396581 -0.398361 +-0.400141 -0.401921 -0.4037 -0.40548 -0.40726 -0.40904 -0.41082 -0.4126 +-0.414379 -0.416159 -0.417938 -0.419718 -0.421497 -0.423277 -0.425056 +-0.426835 -0.428613 -0.430392 -0.43217 -0.433949 -0.435727 -0.437504 +-0.439282 -0.441059 -0.442836 -0.444613 -0.446389 -0.448165 -0.449941 +-0.451716 -0.453491 -0.455266 -0.45704 -0.458814 -0.460588 -0.462361 +-0.464133 -0.465905 -0.467677 -0.469448 -0.471218 -0.472989 -0.474758 +-0.476527 -0.478296 -0.480063 -0.481831 -0.483597 -0.485363 -0.487129 +-0.488893 -0.490658 -0.492421 -0.494184 -0.495946 -0.497707 -0.499467 +-0.501227 -0.502986 -0.504744 -0.506502 -0.508258 -0.510014 -0.511769 +-0.513523 -0.515276 -0.517029 -0.51878 -0.520531 -0.52228 -0.524029 +-0.525777 -0.527523 -0.529269 -0.531014 -0.532758 -0.5345 -0.536242 +-0.537983 -0.539722 -0.54146 -0.543198 -0.544934 -0.546669 -0.548403 +-0.550136 -0.551867 -0.553597 -0.555327 -0.557054 -0.558781 -0.560507 +-0.562231 -0.563954 -0.565675 -0.567395 -0.569114 -0.570832 -0.572548 +-0.574263 -0.575976 -0.577689 -0.579399 -0.581108 -0.582816 -0.584522 +-0.586227 -0.587931 -0.589632 -0.591333 -0.593032 -0.594729 -0.596424 +-0.598118 -0.599811 -0.601502 -0.603191 -0.604879 -0.606565 -0.608249 +-0.609931 -0.611612 -0.613292 -0.614969 -0.616645 -0.618318 -0.619991 +-0.621661 -0.62333 -0.624996 -0.626661 -0.628324 -0.629985 -0.631645 +-0.633302 -0.634958 -0.636611 -0.638263 -0.639913 -0.64156 -0.643206 +-0.64485 -0.646492 -0.648131 -0.649769 -0.651405 -0.653038 -0.65467 +-0.656299 -0.657926 -0.659551 -0.661174 -0.662795 -0.664413 -0.66603 +-0.667644 -0.669256 -0.670866 -0.672473 -0.674078 -0.675681 -0.677282 +-0.67888 -0.680476 -0.68207 -0.683661 -0.68525 -0.686837 -0.688421 +-0.690003 -0.691582 -0.693159 -0.694733 -0.696305 -0.697875 -0.699442 +-0.701006 -0.702568 -0.704127 -0.705684 -0.707238 -0.70879 -0.710339 +-0.711885 -0.713429 -0.71497 -0.716509 -0.718045 -0.719578 -0.721108 +-0.722636 -0.724161 -0.725683 -0.727202 -0.728719 -0.730233 -0.731744 +-0.733252 -0.734757 -0.73626 -0.737759 -0.739256 -0.74075 -0.742241 +-0.743729 -0.745214 -0.746696 -0.748175 -0.749652 -0.751125 -0.752595 +-0.754062 -0.755526 -0.756987 -0.758445 -0.7599 -0.761352 -0.762801 +-0.764246 -0.765689 -0.767128 -0.768564 -0.769997 -0.771427 -0.772853 +-0.774277 -0.775697 -0.777113 -0.778527 -0.779937 -0.781344 -0.782748 +-0.784148 -0.785545 -0.786939 -0.788329 -0.789716 -0.7911 -0.79248 +-0.793856 -0.79523 -0.796599 -0.797966 -0.799329 -0.800688 -0.802044 +-0.803396 -0.804745 -0.80609 -0.807432 -0.80877 -0.810105 -0.811436 +-0.812763 -0.814087 -0.815407 -0.816723 -0.818036 -0.819345 -0.82065 +-0.821952 -0.82325 -0.824544 -0.825835 -0.827121 -0.828404 -0.829683 +-0.830959 -0.83223 -0.833498 -0.834762 -0.836022 -0.837278 -0.83853 +-0.839778 -0.841023 -0.842263 -0.8435 -0.844732 -0.845961 -0.847186 +-0.848406 -0.849623 -0.850836 -0.852045 -0.853249 -0.85445 -0.855646 +-0.856839 -0.858027 -0.859211 -0.860391 -0.861567 -0.862739 -0.863907 +-0.86507 -0.86623 -0.867385 -0.868536 -0.869682 -0.870825 -0.871963 +-0.873097 -0.874227 -0.875352 -0.876473 -0.87759 -0.878703 -0.879811 +-0.880915 -0.882014 -0.883109 -0.8842 -0.885287 -0.886369 -0.887446 +-0.888519 -0.889588 -0.890652 -0.891712 -0.892767 -0.893818 -0.894864 +-0.895906 -0.896943 -0.897976 -0.899004 -0.900028 -0.901047 -0.902061 +-0.903071 -0.904076 -0.905077 -0.906073 -0.907064 -0.908051 -0.909033 +-0.91001 -0.910983 -0.911951 -0.912914 -0.913873 -0.914826 -0.915775 +-0.91672 -0.917659 -0.918594 -0.919524 -0.920449 -0.921369 -0.922285 +-0.923196 -0.924101 -0.925002 -0.925898 -0.92679 -0.927676 -0.928558 +-0.929434 -0.930306 -0.931172 -0.932034 -0.932891 -0.933743 -0.934589 +-0.935431 -0.936268 -0.9371 -0.937927 -0.938749 -0.939565 -0.940377 +-0.941184 -0.941985 -0.942782 -0.943573 -0.944359 -0.945141 -0.945917 +-0.946688 -0.947454 -0.948214 -0.94897 -0.94972 -0.950465 -0.951205 +-0.95194 -0.952669 -0.953394 -0.954113 -0.954827 -0.955535 -0.956239 +-0.956937 -0.957629 -0.958317 -0.958999 -0.959676 -0.960348 -0.961014 +-0.961675 -0.96233 -0.962981 -0.963625 -0.964265 -0.964899 -0.965528 +-0.966151 -0.966769 -0.967382 -0.967989 -0.96859 -0.969187 -0.969777 +-0.970363 -0.970942 -0.971517 -0.972086 -0.972649 -0.973207 -0.973759 +-0.974306 -0.974847 -0.975383 -0.975913 -0.976438 -0.976957 -0.977471 +-0.977979 -0.978481 -0.978978 -0.979469 -0.979954 -0.980434 -0.980909 +-0.981377 -0.98184 -0.982298 -0.982749 -0.983195 -0.983636 -0.98407 +-0.9845 -0.984923 -0.98534 -0.985752 -0.986158 -0.986559 -0.986954 +-0.987343 -0.987726 -0.988103 -0.988475 -0.988841 -0.989201 -0.989556 +-0.989904 -0.990247 -0.990584 -0.990915 -0.99124 -0.99156 -0.991874 +-0.992182 -0.992483 -0.99278 -0.99307 -0.993354 -0.993633 -0.993906 +-0.994172 -0.994433 -0.994688 -0.994938 -0.995181 -0.995418 -0.995649 +-0.995875 -0.996094 -0.996308 -0.996516 -0.996717 -0.996913 -0.997103 +-0.997287 -0.997464 -0.997636 -0.997802 -0.997962 -0.998116 -0.998264 +-0.998406 -0.998542 -0.998672 -0.998795 -0.998913 -0.999025 -0.999131 +-0.99923 -0.999324 -0.999412 -0.999493 -0.999569 -0.999638 -0.999701 +-0.999759 -0.99981 -0.999855 -0.999894 -0.999927 -0.999954 -0.999974 +-0.999989 -0.999998 -1 -0.999996 -0.999986 -0.99997 -0.999948 -0.99992 +-0.999886 -0.999845 -0.999798 -0.999746 -0.999687 -0.999622 -0.99955 +-0.999473 -0.999389 -0.999299 -0.999203 -0.999101 -0.998993 -0.998878 +-0.998758 -0.998631 -0.998498 -0.998358 -0.998213 -0.998061 -0.997903 +-0.997739 -0.997569 -0.997392 -0.997209 -0.99702 -0.996825 -0.996624 +-0.996416 -0.996202 -0.995982 -0.995755 -0.995523 -0.995284 -0.995039 +-0.994787 -0.99453 -0.994266 -0.993996 -0.993719 -0.993437 -0.993148 +-0.992853 -0.992552 -0.992244 -0.99193 -0.99161 -0.991283 -0.990951 +-0.990612 -0.990266 -0.989915 -0.989557 -0.989193 -0.988822 -0.988446 +-0.988063 -0.987674 -0.987278 -0.986876 -0.986468 -0.986054 -0.985633 +-0.985206 -0.984773 -0.984334 -0.983888 -0.983436 -0.982978 -0.982513 +-0.982042 -0.981565 -0.981082 -0.980592 -0.980096 -0.979593 -0.979085 +-0.97857 -0.978049 -0.977521 -0.976987 -0.976447 -0.975901 -0.975348 +-0.974789 -0.974224 -0.973652 -0.973074 -0.97249 -0.9719 -0.971303 +-0.9707 -0.970091 -0.969476 -0.968854 -0.968226 -0.967591 -0.966951 +-0.966304 -0.965651 -0.964991 -0.964325 -0.963654 -0.962975 -0.962291 +-0.9616 -0.960903 -0.960199 -0.95949 -0.958774 -0.958052 -0.957323 +-0.956589 -0.955848 -0.955101 -0.954347 -0.953588 -0.952822 -0.95205 +-0.951271 -0.950487 -0.949696 -0.948899 -0.948096 -0.947286 -0.94647 +-0.945648 -0.94482 -0.943986 -0.943145 -0.942298 -0.941445 -0.940586 +-0.939721 -0.938849 -0.937971 -0.937087 -0.936197 -0.935301 -0.934398 +-0.933489 -0.932574 -0.931653 -0.930726 -0.929792 -0.928853 -0.927907 +-0.926955 -0.925997 -0.925033 -0.924062 -0.923086 -0.922103 -0.921115 +-0.92012 -0.919119 -0.918112 -0.917098 -0.916079 -0.915054 -0.914022 +-0.912984 -0.911941 -0.910891 -0.909835 -0.908773 -0.907705 -0.906631 +-0.90555 -0.904464 -0.903372 -0.902274 -0.901169 -0.900059 -0.898942 +-0.89782 -0.896691 -0.895557 -0.894416 -0.89327 -0.892117 -0.890959 +-0.889794 -0.888624 -0.887447 -0.886265 -0.885076 -0.883882 -0.882682 +-0.881475 -0.880263 -0.879045 -0.877821 -0.876591 -0.875355 -0.874113 +-0.872865 -0.871612 -0.870352 -0.869087 -0.867815 -0.866538 -0.865255 +-0.863966 -0.862672 -0.861371 -0.860065 -0.858752 -0.857434 -0.85611 +-0.854781 -0.853445 -0.852104 -0.850757 -0.849404 -0.848045 -0.846681 +-0.845311 -0.843935 -0.842553 -0.841166 -0.839773 -0.838374 -0.836969 +-0.835559 -0.834143 -0.832721 -0.831294 -0.829861 -0.828422 -0.826978 +-0.825528 -0.824072 -0.822611 -0.821144 -0.819672 -0.818194 -0.81671 +-0.81522 -0.813726 -0.812225 -0.810719 -0.809208 -0.807691 -0.806168 +-0.80464 -0.803106 -0.801567 -0.800022 -0.798472 -0.796916 -0.795355 +-0.793788 -0.792216 -0.790639 -0.789056 -0.787467 -0.785873 -0.784274 +-0.78267 -0.78106 -0.779444 -0.777823 -0.776197 -0.774566 -0.772929 +-0.771287 -0.769639 -0.767986 -0.766328 -0.764665 -0.762996 -0.761322 +-0.759643 -0.757959 -0.756269 -0.754574 -0.752874 -0.751168 -0.749458 +-0.747742 -0.746021 -0.744295 -0.742564 -0.740827 -0.739086 -0.737339 +-0.735587 -0.73383 -0.732068 -0.730301 -0.728529 -0.726752 -0.72497 +-0.723182 -0.72139 -0.719593 -0.71779 -0.715983 -0.714171 -0.712353 +-0.710531 -0.708704 -0.706872 -0.705035 -0.703193 -0.701346 -0.699494 +-0.697638 -0.695776 -0.69391 -0.692039 -0.690163 -0.688282 -0.686396 +-0.684506 -0.682611 -0.680711 -0.678806 -0.676897 -0.674983 -0.673064 +-0.67114 -0.669212 -0.667279 -0.665341 -0.663399 -0.661452 -0.6595 +-0.657544 -0.655583 -0.653618 -0.651648 -0.649673 -0.647694 -0.645711 +-0.643723 -0.64173 -0.639733 -0.637731 -0.635725 -0.633714 -0.631699 +-0.62968 -0.627656 -0.625628 -0.623595 -0.621558 -0.619516 -0.61747 +-0.61542 -0.613366 -0.611307 -0.609244 -0.607176 -0.605105 -0.603029 +-0.600949 -0.598864 -0.596776 -0.594683 -0.592586 -0.590485 -0.588379 +-0.58627 -0.584156 -0.582038 -0.579917 -0.577791 -0.575661 -0.573526 +-0.571388 -0.569246 -0.5671 -0.56495 -0.562796 -0.560637 -0.558475 +-0.556309 -0.554139 -0.551965 -0.549788 -0.547606 -0.54542 -0.543231 +-0.541038 -0.53884 -0.53664 -0.534435 -0.532226 -0.530014 -0.527798 +-0.525578 -0.523355 -0.521128 -0.518897 -0.516662 -0.514424 -0.512182 +-0.509937 -0.507688 -0.505435 -0.503179 -0.500919 -0.498655 -0.496388 +-0.494118 -0.491844 -0.489566 -0.487285 -0.485001; +#A 8000 -0.482713 -0.480422 -0.478127 -0.475829 -0.473528 -0.471223 +-0.468915 -0.466603 -0.464288 -0.46197 -0.459649 -0.457324 -0.454996 +-0.452665 -0.45033 -0.447993 -0.445652 -0.443308 -0.440961 -0.438611 +-0.436257 -0.433901 -0.431541 -0.429179 -0.426813 -0.424444 -0.422072 +-0.419698 -0.41732 -0.414939 -0.412555 -0.410169 -0.407779 -0.405387 +-0.402991 -0.400593 -0.398192 -0.395788 -0.393381 -0.390972 -0.388559 +-0.386144 -0.383726 -0.381306 -0.378882 -0.376456 -0.374027 -0.371596 +-0.369162 -0.366725 -0.364286 -0.361844 -0.359399 -0.356952 -0.354503 +-0.35205 -0.349596 -0.347139 -0.344679 -0.342217 -0.339752 -0.337285 +-0.334816 -0.332344 -0.32987 -0.327393 -0.324914 -0.322433 -0.319949 +-0.317464 -0.314976 -0.312485 -0.309993 -0.307498 -0.305001 -0.302502 +-0.3 -0.297497 -0.294991 -0.292483 -0.289973 -0.287462 -0.284948 -0.282432 +-0.279913 -0.277393 -0.274871 -0.272347 -0.269821 -0.267293 -0.264764 +-0.262232 -0.259698 -0.257163 -0.254626 -0.252086 -0.249546 -0.247003 +-0.244458 -0.241912 -0.239364 -0.236814 -0.234263 -0.23171 -0.229155 +-0.226599 -0.224041 -0.221481 -0.21892 -0.216357 -0.213793 -0.211227 +-0.20866 -0.206091 -0.20352 -0.200948 -0.198375 -0.195801 -0.193224 +-0.190647 -0.188068 -0.185488 -0.182906 -0.180323 -0.177739 -0.175154 +-0.172567 -0.169979 -0.16739 -0.1648 -0.162208 -0.159616 -0.157022 +-0.154427 -0.151831 -0.149234 -0.146635 -0.144036 -0.141436 -0.138834 +-0.136232 -0.133629 -0.131024 -0.128419 -0.125813 -0.123206 -0.120598 +-0.117989 -0.115379 -0.112769 -0.110158 -0.107546 -0.104933 -0.102319 +-0.0997047 -0.0970896 -0.0944739 -0.0918574 -0.0892403 -0.0866226 -0.0840042 +-0.0813852 -0.0787656 -0.0761455 -0.0735248 -0.0709036 -0.0682819 -0.0656597 +-0.063037 -0.0604139 -0.0577903 -0.0551663 -0.0525419 -0.0499172 -0.047292 +-0.0446666 -0.0420408 -0.0394147 -0.0367883 -0.0341617 -0.0315348 -0.0289077 +-0.0262804 -0.0236529 -0.0210252 -0.0183974 -0.0157695 -0.0131414 -0.0105132 +-0.00788498 -0.00525669 -0.00262835; +#X coords 0 1 8191 -1 100 70 1; +#X restore 355 67 graph; +#N canvas 0 22 450 300 (subpatch) 0; +#X array window 8192 float 3; +#A 0 0 0.00490196 0.00980392 0.0147059 0.0196078 0.0245098 0.0294118 +0.0343137 0.0392157 0.0441176 0.0490196 0.0539216 0.0588235 0.0637255 +0.0686275 0.0735294 0.0784314 0.0833333 0.0882353 0.0931373 0.0980392 +0.102941 0.107843 0.112745 0.117647 0.122549 0.127451 0.132353 0.137255 +0.142157 0.147059 0.151961 0.156863 0.161765 0.166667 0.171569 0.176471 +0.181373 0.186275 0.191176 0.196078 0.20098 0.205882 0.210784 0.215686 +0.220588 0.22549 0.230392 0.235294 0.240196 0.245098 0.25 0.254902 +0.259804 0.264706 0.269608 0.27451 0.279412 0.284314 0.289216 0.294118 +0.29902 0.303922 0.308824 0.313726 0.318627 0.323529 0.328431 0.333333 +0.338235 0.343137 0.348039 0.352941 0.357843 0.362745 0.367647 0.372549 +0.377451 0.382353 0.387255 0.392157 0.397059 0.401961 0.406863 0.411765 +0.416667 0.421569 0.426471 0.431373 0.436274 0.441176 0.446078 0.45098 +0.455882 0.460784 0.465686 0.470588 0.47549 0.480392 0.485294 0.490196 +0.495098 0.5 0.504902 0.509804 0.514706 0.519608 0.52451 0.529412 0.534314 +0.539216 0.544118 0.54902 0.553922 0.558824 0.563725 0.568627 0.573529 +0.578431 0.583333 0.588235 0.593137 0.598039 0.602941 0.607843 0.612745 +0.617647 0.622549 0.627451 0.632353 0.637255 0.642157 0.647059 0.651961 +0.656863 0.661765 0.666667 0.671569 0.676471 0.681373 0.686275 0.691176 +0.696078 0.70098 0.705882 0.710784 0.715686 0.720588 0.72549 0.730392 +0.735294 0.740196 0.745098 0.75 0.754902 0.759804 0.764706 0.769608 +0.77451 0.779412 0.784314 0.789216 0.794118 0.79902 0.803922 0.808824 +0.813725 0.818627 0.823529 0.828431 0.833333 0.838235 0.843137 0.848039 +0.852941 0.857843 0.862745 0.867647 0.872549 0.877451 0.882353 0.887255 +0.892157 0.897059 0.901961 0.906863 0.911765 0.916667 0.921569 0.926471 +0.931373 0.936275 0.941176 0.946078 0.95098 0.955882 0.960784 0.965686 +0.970588 0.97549 0.980392 0.985294 0.990196 0.995098 1 0.999875 0.99975 +0.999624 0.999499 0.999374 0.999249 0.999124 0.998999 0.998873 0.998748 +0.998623 0.998498 0.998373 0.998247 0.998122 0.997997 0.997872 0.997747 +0.997621 0.997496 0.997371 0.997246 0.997121 0.996996 0.99687 0.996745 +0.99662 0.996495 0.99637 0.996244 0.996119 0.995994 0.995869 0.995744 +0.995618 0.995493 0.995368 0.995243 0.995118 0.994992 0.994867 0.994742 +0.994617 0.994492 0.994367 0.994241 0.994116 0.993991 0.993866 0.993741 +0.993615 0.99349 0.993365 0.99324 0.993115 0.992989 0.992864 0.992739 +0.992614 0.992489 0.992364 0.992238 0.992113 0.991988 0.991863 0.991738 +0.991612 0.991487 0.991362 0.991237 0.991112 0.990986 0.990861 0.990736 +0.990611 0.990486 0.990361 0.990235 0.99011 0.989985 0.98986 0.989735 +0.989609 0.989484 0.989359 0.989234 0.989109 0.988983 0.988858 0.988733 +0.988608 0.988483 0.988358 0.988232 0.988107 0.987982 0.987857 0.987732 +0.987606 0.987481 0.987356 0.987231 0.987106 0.98698 0.986855 0.98673 +0.986605 0.98648 0.986355 0.986229 0.986104 0.985979 0.985854 0.985729 +0.985603 0.985478 0.985353 0.985228 0.985103 0.984977 0.984852 0.984727 +0.984602 0.984477 0.984352 0.984226 0.984101 0.983976 0.983851 0.983726 +0.9836 0.983475 0.98335 0.983225 0.9831 0.982974 0.982849 0.982724 +0.982599 0.982474 0.982349 0.982223 0.982098 0.981973 0.981848 0.981723 +0.981597 0.981472 0.981347 0.981222 0.981097 0.980971 0.980846 0.980721 +0.980596 0.980471 0.980346 0.98022 0.980095 0.97997 0.979845 0.97972 +0.979594 0.979469 0.979344 0.979219 0.979094 0.978968 0.978843 0.978718 +0.978593 0.978468 0.978343 0.978217 0.978092 0.977967 0.977842 0.977717 +0.977591 0.977466 0.977341 0.977216 0.977091 0.976965 0.97684 0.976715 +0.97659 0.976465 0.97634 0.976214 0.976089 0.975964 0.975839 0.975714 +0.975588 0.975463 0.975338 0.975213 0.975088 0.974962 0.974837 0.974712 +0.974587 0.974462 0.974337 0.974211 0.974086 0.973961 0.973836 0.973711 +0.973585 0.97346 0.973335 0.97321 0.973085 0.972959 0.972834 0.972709 +0.972584 0.972459 0.972333 0.972208 0.972083 0.971958 0.971833 0.971708 +0.971582 0.971457 0.971332 0.971207 0.971082 0.970956 0.970831 0.970706 +0.970581 0.970456 0.97033 0.970205 0.97008 0.969955 0.96983 0.969705 +0.969579 0.969454 0.969329 0.969204 0.969079 0.968953 0.968828 0.968703 +0.968578 0.968453 0.968327 0.968202 0.968077 0.967952 0.967827 0.967702 +0.967576 0.967451 0.967326 0.967201 0.967076 0.96695 0.966825 0.9667 +0.966575 0.96645 0.966325 0.966199 0.966074 0.965949 0.965824 0.965699 +0.965573 0.965448 0.965323 0.965198 0.965073 0.964947 0.964822 0.964697 +0.964572 0.964447 0.964321 0.964196 0.964071 0.963946 0.963821 0.963696 +0.96357 0.963445 0.96332 0.963195 0.96307 0.962944 0.962819 0.962694 +0.962569 0.962444 0.962318 0.962193 0.962068 0.961943 0.961818 0.961693 +0.961567 0.961442 0.961317 0.961192 0.961067 0.960941 0.960816 0.960691 +0.960566 0.960441 0.960315 0.96019 0.960065 0.95994 0.959815 0.95969 +0.959564 0.959439 0.959314 0.959189 0.959064 0.958938 0.958813 0.958688 +0.958563 0.958438 0.958312 0.958187 0.958062 0.957937 0.957812 0.957687 +0.957561 0.957436 0.957311 0.957186 0.957061 0.956935 0.95681 0.956685 +0.95656 0.956435 0.956309 0.956184 0.956059 0.955934 0.955809 0.955684 +0.955558 0.955433 0.955308 0.955183 0.955058 0.954932 0.954807 0.954682 +0.954557 0.954432 0.954306 0.954181 0.954056 0.953931 0.953806 0.953681 +0.953555 0.95343 0.953305 0.95318 0.953055 0.952929 0.952804 0.952679 +0.952554 0.952429 0.952303 0.952178 0.952053 0.951928 0.951803 0.951678 +0.951552 0.951427 0.951302 0.951177 0.951052 0.950926 0.950801 0.950676 +0.950551 0.950426 0.9503 0.950175 0.95005 0.949925 0.9498 0.949674 +0.949549 0.949424 0.949299 0.949174 0.949049 0.948923 0.948798 0.948673 +0.948548 0.948423 0.948297 0.948172 0.948047 0.947922 0.947797 0.947672 +0.947546 0.947421 0.947296 0.947171 0.947046 0.94692 0.946795 0.94667 +0.946545 0.94642 0.946294 0.946169 0.946044 0.945919 0.945794 0.945669 +0.945543 0.945418 0.945293 0.945168 0.945043 0.944917 0.944792 0.944667 +0.944542 0.944417 0.944291 0.944166 0.944041 0.943916 0.943791 0.943666 +0.94354 0.943415 0.94329 0.943165 0.94304 0.942914 0.942789 0.942664 +0.942539 0.942414 0.942288 0.942163 0.942038 0.941913 0.941788 0.941662 +0.941537 0.941412 0.941287 0.941162 0.941037 0.940911 0.940786 0.940661 +0.940536 0.940411 0.940285 0.94016 0.940035 0.93991 0.939785 0.939659 +0.939534 0.939409 0.939284 0.939159 0.939034 0.938908 0.938783 0.938658 +0.938533 0.938408 0.938282 0.938157 0.938032 0.937907 0.937782 0.937656 +0.937531 0.937406 0.937281 0.937156 0.937031 0.936905 0.93678 0.936655 +0.93653 0.936405 0.936279 0.936154 0.936029 0.935904 0.935779 0.935654 +0.935528 0.935403 0.935278 0.935153 0.935028 0.934902 0.934777 0.934652 +0.934527 0.934402 0.934276 0.934151 0.934026 0.933901 0.933776 0.93365 +0.933525 0.9334 0.933275 0.93315 0.933025 0.932899 0.932774 0.932649 +0.932524 0.932399 0.932273 0.932148 0.932023 0.931898 0.931773 0.931647 +0.931522 0.931397 0.931272 0.931147 0.931022 0.930896 0.930771 0.930646 +0.930521 0.930396 0.93027 0.930145 0.93002 0.929895 0.92977 0.929644 +0.929519 0.929394 0.929269 0.929144 0.929019 0.928893 0.928768 0.928643 +0.928518 0.928393 0.928267 0.928142 0.928017 0.927892 0.927767 0.927641 +0.927516 0.927391 0.927266 0.927141 0.927016 0.92689 0.926765 0.92664 +0.926515 0.92639 0.926264 0.926139 0.926014 0.925889 0.925764 0.925638 +0.925513 0.925388 0.925263 0.925138 0.925013 0.924887 0.924762 0.924637 +0.924512 0.924387 0.924261 0.924136 0.924011 0.923886 0.923761 0.923635 +0.92351 0.923385 0.92326 0.923135 0.92301 0.922884 0.922759 0.922634 +0.922509 0.922384 0.922258 0.922133 0.922008 0.921883 0.921758 0.921632 +0.921507 0.921382 0.921257 0.921132 0.921007 0.920881 0.920756 0.920631 +0.920506 0.920381 0.920255 0.92013 0.920005 0.91988 0.919755 0.919629 +0.919504 0.919379 0.919254 0.919129 0.919003 0.918878 0.918753 0.918628 +0.918503 0.918378 0.918252 0.918127 0.918002 0.917877 0.917752 0.917626 +0.917501 0.917376 0.917251 0.917126 0.917 0.916875 0.91675 0.916625 +0.9165 0.916375 0.916249 0.916124 0.915999 0.915874 0.915749 0.915623 +0.915498 0.915373 0.915248 0.915123 0.914998 0.914872 0.914747 0.914622 +0.914497 0.914372 0.914246 0.914121 0.913996 0.913871 0.913746 0.91362 +0.913495 0.91337 0.913245 0.91312 0.912995 0.912869 0.912744 0.912619 +0.912494 0.912369 0.912243 0.912118 0.911993 0.911868 0.911743 0.911617 +0.911492 0.911367 0.911242 0.911117 0.910991 0.910866 0.910741 0.910616 +0.910491 0.910366 0.91024 0.910115 0.90999 0.909865 0.90974 0.909614 +0.909489 0.909364 0.909239 0.909114 0.908988 0.908863 0.908738 0.908613 +0.908488 0.908363 0.908237 0.908112 0.907987 0.907862 0.907737 0.907611 +0.907486 0.907361 0.907236 0.907111 0.906985 0.90686 0.906735 0.90661 +0.906485 0.90636 0.906234 0.906109 0.905984 0.905859 0.905734 0.905608 +0.905483 0.905358 0.905233 0.905108 0.904982 0.904857 0.904732 0.904607 +0.904482 0.904357 0.904231 0.904106 0.903981 0.903856 0.903731 0.903605 +0.90348 0.903355 0.90323 0.903105 0.902979 0.902854 0.902729 0.902604 +0.902479 0.902354 0.902228 0.902103 0.901978 0.901853 0.901728 0.901602 +0.901477 0.901352 0.901227 0.901102 0.900976 0.900851 0.900726 0.900601 +0.900476; +#A 1000 0.900351 0.900225 0.9001 0.899975 0.89985 0.899725 0.899599 +0.899474 0.899349 0.899224 0.899099 0.898973 0.898848 0.898723 0.898598 +0.898473 0.898347 0.898222 0.898097 0.897972 0.897847 0.897722 0.897596 +0.897471 0.897346 0.897221 0.897096 0.89697 0.896845 0.89672 0.896595 +0.89647 0.896345 0.896219 0.896094 0.895969 0.895844 0.895719 0.895593 +0.895468 0.895343 0.895218 0.895093 0.894967 0.894842 0.894717 0.894592 +0.894467 0.894342 0.894216 0.894091 0.893966 0.893841 0.893716 0.89359 +0.893465 0.89334 0.893215 0.89309 0.892964 0.892839 0.892714 0.892589 +0.892464 0.892339 0.892213 0.892088 0.891963 0.891838 0.891713 0.891587 +0.891462 0.891337 0.891212 0.891087 0.890961 0.890836 0.890711 0.890586 +0.890461 0.890336 0.89021 0.890085 0.88996 0.889835 0.88971 0.889584 +0.889459 0.889334 0.889209 0.889084 0.888958 0.888833 0.888708 0.888583 +0.888458 0.888332 0.888207 0.888082 0.887957 0.887832 0.887707 0.887581 +0.887456 0.887331 0.887206 0.887081 0.886955 0.88683 0.886705 0.88658 +0.886455 0.886329 0.886204 0.886079 0.885954 0.885829 0.885704 0.885578 +0.885453 0.885328 0.885203 0.885078 0.884952 0.884827 0.884702 0.884577 +0.884452 0.884327 0.884201 0.884076 0.883951 0.883826 0.883701 0.883575 +0.88345 0.883325 0.8832 0.883075 0.882949 0.882824 0.882699 0.882574 +0.882449 0.882324 0.882198 0.882073 0.881948 0.881823 0.881698 0.881572 +0.881447 0.881322 0.881197 0.881072 0.880946 0.880821 0.880696 0.880571 +0.880446 0.88032 0.880195 0.88007 0.879945 0.87982 0.879695 0.879569 +0.879444 0.879319 0.879194 0.879069 0.878943 0.878818 0.878693 0.878568 +0.878443 0.878317 0.878192 0.878067 0.877942 0.877817 0.877692 0.877566 +0.877441 0.877316 0.877191 0.877066 0.87694 0.876815 0.87669 0.876565 +0.87644 0.876314 0.876189 0.876064 0.875939 0.875814 0.875689 0.875563 +0.875438 0.875313 0.875188 0.875063 0.874937 0.874812 0.874687 0.874562 +0.874437 0.874311 0.874186 0.874061 0.873936 0.873811 0.873686 0.87356 +0.873435 0.87331 0.873185 0.87306 0.872934 0.872809 0.872684 0.872559 +0.872434 0.872308 0.872183 0.872058 0.871933 0.871808 0.871683 0.871557 +0.871432 0.871307 0.871182 0.871057 0.870931 0.870806 0.870681 0.870556 +0.870431 0.870305 0.87018 0.870055 0.86993 0.869805 0.86968 0.869554 +0.869429 0.869304 0.869179 0.869054 0.868928 0.868803 0.868678 0.868553 +0.868428 0.868302 0.868177 0.868052 0.867927 0.867802 0.867676 0.867551 +0.867426 0.867301 0.867176 0.867051 0.866925 0.8668 0.866675 0.86655 +0.866425 0.866299 0.866174 0.866049 0.865924 0.865799 0.865673 0.865548 +0.865423 0.865298 0.865173 0.865048 0.864922 0.864797 0.864672 0.864547 +0.864422 0.864296 0.864171 0.864046 0.863921 0.863796 0.863671 0.863545 +0.86342 0.863295 0.86317 0.863045 0.862919 0.862794 0.862669 0.862544 +0.862419 0.862293 0.862168 0.862043 0.861918 0.861793 0.861668 0.861542 +0.861417 0.861292 0.861167 0.861042 0.860916 0.860791 0.860666 0.860541 +0.860416 0.86029 0.860165 0.86004 0.859915 0.85979 0.859664 0.859539 +0.859414 0.859289 0.859164 0.859039 0.858913 0.858788 0.858663 0.858538 +0.858413 0.858287 0.858162 0.858037 0.857912 0.857787 0.857661 0.857536 +0.857411 0.857286 0.857161 0.857036 0.85691 0.856785 0.85666 0.856535 +0.85641 0.856284 0.856159 0.856034 0.855909 0.855784 0.855658 0.855533 +0.855408 0.855283 0.855158 0.855033 0.854907 0.854782 0.854657 0.854532 +0.854407 0.854281 0.854156 0.854031 0.853906 0.853781 0.853655 0.85353 +0.853405 0.85328 0.853155 0.85303 0.852904 0.852779 0.852654 0.852529 +0.852404 0.852278 0.852153 0.852028 0.851903 0.851778 0.851653 0.851527 +0.851402 0.851277 0.851152 0.851027 0.850901 0.850776 0.850651 0.850526 +0.850401 0.850275 0.85015 0.850025 0.8499 0.849775 0.849649 0.849524 +0.849399 0.849274 0.849149 0.849024 0.848898 0.848773 0.848648 0.848523 +0.848398 0.848272 0.848147 0.848022 0.847897 0.847772 0.847646 0.847521 +0.847396 0.847271 0.847146 0.847021 0.846895 0.84677 0.846645 0.84652 +0.846395 0.846269 0.846144 0.846019 0.845894 0.845769 0.845643 0.845518 +0.845393 0.845268 0.845143 0.845018 0.844892 0.844767 0.844642 0.844517 +0.844392 0.844266 0.844141 0.844016 0.843891 0.843766 0.84364 0.843515 +0.84339 0.843265 0.84314 0.843015 0.842889 0.842764 0.842639 0.842514 +0.842389 0.842263 0.842138 0.842013 0.841888 0.841763 0.841637 0.841512 +0.841387 0.841262 0.841137 0.841012 0.840886 0.840761 0.840636 0.840511 +0.840386 0.84026 0.840135 0.84001 0.839885 0.83976 0.839634 0.839509 +0.839384 0.839259 0.839134 0.839009 0.838883 0.838758 0.838633 0.838508 +0.838383 0.838257 0.838132 0.838007 0.837882 0.837757 0.837631 0.837506 +0.837381 0.837256 0.837131 0.837005 0.83688 0.836755 0.83663 0.836505 +0.83638 0.836254 0.836129 0.836004 0.835879 0.835754 0.835628 0.835503 +0.835378 0.835253 0.835128 0.835002 0.834877 0.834752 0.834627 0.834502 +0.834377 0.834251 0.834126 0.834001 0.833876 0.833751 0.833625 0.8335 +0.833375 0.83325 0.833125 0.833 0.832874 0.832749 0.832624 0.832499 +0.832374 0.832248 0.832123 0.831998 0.831873 0.831748 0.831622 0.831497 +0.831372 0.831247 0.831122 0.830997 0.830871 0.830746 0.830621 0.830496 +0.830371 0.830245 0.83012 0.829995 0.82987 0.829745 0.829619 0.829494 +0.829369 0.829244 0.829119 0.828993 0.828868 0.828743 0.828618 0.828493 +0.828368 0.828242 0.828117 0.827992 0.827867 0.827742 0.827616 0.827491 +0.827366 0.827241 0.827116 0.82699 0.826865 0.82674 0.826615 0.82649 +0.826365 0.826239 0.826114 0.825989 0.825864 0.825739 0.825613 0.825488 +0.825363 0.825238 0.825113 0.824987 0.824862 0.824737 0.824612 0.824487 +0.824362 0.824236 0.824111 0.823986 0.823861 0.823736 0.82361 0.823485 +0.82336 0.823235 0.82311 0.822984 0.822859 0.822734 0.822609 0.822484 +0.822359 0.822233 0.822108 0.821983 0.821858 0.821733 0.821607 0.821482 +0.821357 0.821232 0.821107 0.820981 0.820856 0.820731 0.820606 0.820481 +0.820356 0.82023 0.820105 0.81998 0.819855 0.81973 0.819604 0.819479 +0.819354 0.819229 0.819104 0.818978 0.818853 0.818728 0.818603 0.818478 +0.818353 0.818227 0.818102 0.817977 0.817852 0.817727 0.817601 0.817476 +0.817351 0.817226 0.817101 0.816975 0.81685 0.816725 0.8166 0.816475 +0.81635 0.816224 0.816099 0.815974 0.815849 0.815724 0.815598 0.815473 +0.815348 0.815223 0.815098 0.814972 0.814847 0.814722 0.814597 0.814472 +0.814346 0.814221 0.814096 0.813971 0.813846 0.813721 0.813595 0.81347 +0.813345 0.81322 0.813095 0.812969 0.812844 0.812719 0.812594 0.812469 +0.812344 0.812218 0.812093 0.811968 0.811843 0.811718 0.811592 0.811467 +0.811342 0.811217 0.811092 0.810966 0.810841 0.810716 0.810591 0.810466 +0.810341 0.810215 0.81009 0.809965 0.80984 0.809715 0.809589 0.809464 +0.809339 0.809214 0.809089 0.808963 0.808838 0.808713 0.808588 0.808463 +0.808338 0.808212 0.808087 0.807962 0.807837 0.807712 0.807586 0.807461 +0.807336 0.807211 0.807086 0.80696 0.806835 0.80671 0.806585 0.80646 +0.806334 0.806209 0.806084 0.805959 0.805834 0.805709 0.805583 0.805458 +0.805333 0.805208 0.805083 0.804957 0.804832 0.804707 0.804582 0.804457 +0.804331 0.804206 0.804081 0.803956 0.803831 0.803706 0.80358 0.803455 +0.80333 0.803205 0.80308 0.802954 0.802829 0.802704 0.802579 0.802454 +0.802328 0.802203 0.802078 0.801953 0.801828 0.801703 0.801577 0.801452 +0.801327 0.801202 0.801077 0.800951 0.800826 0.800701 0.800576 0.800451 +0.800326 0.8002 0.800075 0.79995 0.799825 0.7997 0.799574 0.799449 +0.799324 0.799199 0.799074 0.798948 0.798823 0.798698 0.798573 0.798448 +0.798322 0.798197 0.798072 0.797947 0.797822 0.797697 0.797571 0.797446 +0.797321 0.797196 0.797071 0.796945 0.79682 0.796695 0.79657 0.796445 +0.796319 0.796194 0.796069 0.795944 0.795819 0.795694 0.795568 0.795443 +0.795318 0.795193 0.795068 0.794942 0.794817 0.794692 0.794567 0.794442 +0.794316 0.794191 0.794066 0.793941 0.793816 0.793691 0.793565 0.79344 +0.793315 0.79319 0.793065 0.792939 0.792814 0.792689 0.792564 0.792439 +0.792313 0.792188 0.792063 0.791938 0.791813 0.791688 0.791562 0.791437 +0.791312 0.791187 0.791062 0.790936 0.790811 0.790686 0.790561 0.790436 +0.79031 0.790185 0.79006 0.789935 0.78981 0.789685 0.789559 0.789434 +0.789309 0.789184 0.789059 0.788933 0.788808 0.788683 0.788558 0.788433 +0.788307 0.788182 0.788057 0.787932 0.787807 0.787682 0.787556 0.787431 +0.787306 0.787181 0.787056 0.78693 0.786805 0.78668 0.786555 0.78643 +0.786304 0.786179 0.786054 0.785929 0.785804 0.785679 0.785553 0.785428 +0.785303 0.785178 0.785053 0.784927 0.784802 0.784677 0.784552 0.784427 +0.784301 0.784176 0.784051 0.783926 0.783801 0.783675 0.78355 0.783425 +0.7833 0.783175 0.78305 0.782924 0.782799 0.782674 0.782549 0.782424 +0.782298 0.782173 0.782048 0.781923 0.781798 0.781673 0.781547 0.781422 +0.781297 0.781172 0.781047 0.780921 0.780796 0.780671 0.780546 0.780421 +0.780295 0.78017 0.780045 0.77992 0.779795 0.77967 0.779544 0.779419 +0.779294 0.779169 0.779044 0.778918 0.778793 0.778668 0.778543 0.778418 +0.778292 0.778167 0.778042 0.777917 0.777792 0.777667 0.777541 0.777416 +0.777291 0.777166 0.777041 0.776915 0.77679 0.776665 0.77654 0.776415 +0.776289 0.776164 0.776039 0.775914 0.775789 0.775663 0.775538 0.775413 +0.775288; +#A 2000 0.775163 0.775038 0.774912 0.774787 0.774662 0.774537 0.774412 +0.774286 0.774161 0.774036 0.773911 0.773786 0.77366 0.773535 0.77341 +0.773285 0.77316 0.773035 0.772909 0.772784 0.772659 0.772534 0.772409 +0.772283 0.772158 0.772033 0.771908 0.771783 0.771657 0.771532 0.771407 +0.771282 0.771157 0.771032 0.770906 0.770781 0.770656 0.770531 0.770406 +0.77028 0.770155 0.77003 0.769905 0.76978 0.769654 0.769529 0.769404 +0.769279 0.769154 0.769029 0.768903 0.768778 0.768653 0.768528 0.768403 +0.768277 0.768152 0.768027 0.767902 0.767777 0.767651 0.767526 0.767401 +0.767276 0.767151 0.767026 0.7669 0.766775 0.76665 0.766525 0.7664 +0.766274 0.766149 0.766024 0.765899 0.765774 0.765648 0.765523 0.765398 +0.765273 0.765148 0.765023 0.764897 0.764772 0.764647 0.764522 0.764397 +0.764271 0.764146 0.764021 0.763896 0.763771 0.763645 0.76352 0.763395 +0.76327 0.763145 0.76302 0.762894 0.762769 0.762644 0.762519 0.762394 +0.762268 0.762143 0.762018 0.761893 0.761768 0.761642 0.761517 0.761392 +0.761267 0.761142 0.761017 0.760891 0.760766 0.760641 0.760516 0.760391 +0.760265 0.76014 0.760015 0.75989 0.759765 0.759639 0.759514 0.759389 +0.759264 0.759139 0.759014 0.758888 0.758763 0.758638 0.758513 0.758388 +0.758262 0.758137 0.758012 0.757887 0.757762 0.757636 0.757511 0.757386 +0.757261 0.757136 0.757011 0.756885 0.75676 0.756635 0.75651 0.756385 +0.756259 0.756134 0.756009 0.755884 0.755759 0.755633 0.755508 0.755383 +0.755258 0.755133 0.755008 0.754882 0.754757 0.754632 0.754507 0.754382 +0.754256 0.754131 0.754006 0.753881 0.753756 0.75363 0.753505 0.75338 +0.753255 0.75313 0.753004 0.752879 0.752754 0.752629 0.752504 0.752379 +0.752253 0.752128 0.752003 0.751878 0.751753 0.751627 0.751502 0.751377 +0.751252 0.751127 0.751001 0.750876 0.750751 0.750626 0.750501 0.750376 +0.75025 0.750125 0.75 0.749875 0.74975 0.749624 0.749499 0.749374 0.749249 +0.749124 0.748999 0.748873 0.748748 0.748623 0.748498 0.748373 0.748247 +0.748122 0.747997 0.747872 0.747747 0.747621 0.747496 0.747371 0.747246 +0.747121 0.746996 0.74687 0.746745 0.74662 0.746495 0.74637 0.746244 +0.746119 0.745994 0.745869 0.745744 0.745618 0.745493 0.745368 0.745243 +0.745118 0.744992 0.744867 0.744742 0.744617 0.744492 0.744367 0.744241 +0.744116 0.743991 0.743866 0.743741 0.743615 0.74349 0.743365 0.74324 +0.743115 0.742989 0.742864 0.742739 0.742614 0.742489 0.742364 0.742238 +0.742113 0.741988 0.741863 0.741738 0.741612 0.741487 0.741362 0.741237 +0.741112 0.740986 0.740861 0.740736 0.740611 0.740486 0.740361 0.740235 +0.74011 0.739985 0.73986 0.739735 0.739609 0.739484 0.739359 0.739234 +0.739109 0.738983 0.738858 0.738733 0.738608 0.738483 0.738358 0.738232 +0.738107 0.737982 0.737857 0.737732 0.737606 0.737481 0.737356 0.737231 +0.737106 0.73698 0.736855 0.73673 0.736605 0.73648 0.736355 0.736229 +0.736104 0.735979 0.735854 0.735729 0.735603 0.735478 0.735353 0.735228 +0.735103 0.734977 0.734852 0.734727 0.734602 0.734477 0.734352 0.734226 +0.734101 0.733976 0.733851 0.733726 0.7336 0.733475 0.73335 0.733225 +0.7331 0.732974 0.732849 0.732724 0.732599 0.732474 0.732349 0.732223 +0.732098 0.731973 0.731848 0.731723 0.731597 0.731472 0.731347 0.731222 +0.731097 0.730971 0.730846 0.730721 0.730596 0.730471 0.730346 0.73022 +0.730095 0.72997 0.729845 0.72972 0.729594 0.729469 0.729344 0.729219 +0.729094 0.728968 0.728843 0.728718 0.728593 0.728468 0.728343 0.728217 +0.728092 0.727967 0.727842 0.727717 0.727591 0.727466 0.727341 0.727216 +0.727091 0.726965 0.72684 0.726715 0.72659 0.726465 0.72634 0.726214 +0.726089 0.725964 0.725839 0.725714 0.725588 0.725463 0.725338 0.725213 +0.725088 0.724962 0.724837 0.724712 0.724587 0.724462 0.724337 0.724211 +0.724086 0.723961 0.723836 0.723711 0.723585 0.72346 0.723335 0.72321 +0.723085 0.722959 0.722834 0.722709 0.722584 0.722459 0.722333 0.722208 +0.722083 0.721958 0.721833 0.721708 0.721582 0.721457 0.721332 0.721207 +0.721082 0.720956 0.720831 0.720706 0.720581 0.720456 0.72033 0.720205 +0.72008 0.719955 0.71983 0.719705 0.719579 0.719454 0.719329 0.719204 +0.719079 0.718953 0.718828 0.718703 0.718578 0.718453 0.718327 0.718202 +0.718077 0.717952 0.717827 0.717702 0.717576 0.717451 0.717326 0.717201 +0.717076 0.71695 0.716825 0.7167 0.716575 0.71645 0.716325 0.716199 +0.716074 0.715949 0.715824 0.715699 0.715573 0.715448 0.715323 0.715198 +0.715073 0.714947 0.714822 0.714697 0.714572 0.714447 0.714321 0.714196 +0.714071 0.713946 0.713821 0.713696 0.71357 0.713445 0.71332 0.713195 +0.71307 0.712944 0.712819 0.712694 0.712569 0.712444 0.712318 0.712193 +0.712068 0.711943 0.711818 0.711693 0.711567 0.711442 0.711317 0.711192 +0.711067 0.710941 0.710816 0.710691 0.710566 0.710441 0.710315 0.71019 +0.710065 0.70994 0.709815 0.70969 0.709564 0.709439 0.709314 0.709189 +0.709064 0.708938 0.708813 0.708688 0.708563 0.708438 0.708312 0.708187 +0.708062 0.707937 0.707812 0.707687 0.707561 0.707436 0.707311 0.707186 +0.707061 0.706935 0.70681 0.706685 0.70656 0.706435 0.706309 0.706184 +0.706059 0.705934 0.705809 0.705684 0.705558 0.705433 0.705308 0.705183 +0.705058 0.704932 0.704807 0.704682 0.704557 0.704432 0.704306 0.704181 +0.704056 0.703931 0.703806 0.703681 0.703555 0.70343 0.703305 0.70318 +0.703055 0.702929 0.702804 0.702679 0.702554 0.702429 0.702303 0.702178 +0.702053 0.701928 0.701803 0.701678 0.701552 0.701427 0.701302 0.701177 +0.701052 0.700926 0.700801 0.700676 0.700551 0.700426 0.7003 0.700175 +0.70005 0.699925 0.6998 0.699674 0.699549 0.699424 0.699299 0.699174 +0.699049 0.698923 0.698798 0.698673 0.698548 0.698423 0.698297 0.698172 +0.698047 0.697922 0.697797 0.697672 0.697546 0.697421 0.697296 0.697171 +0.697046 0.69692 0.696795 0.69667 0.696545 0.69642 0.696294 0.696169 +0.696044 0.695919 0.695794 0.695669 0.695543 0.695418 0.695293 0.695168 +0.695043 0.694917 0.694792 0.694667 0.694542 0.694417 0.694291 0.694166 +0.694041 0.693916 0.693791 0.693666 0.69354 0.693415 0.69329 0.693165 +0.69304 0.692914 0.692789 0.692664 0.692539 0.692414 0.692288 0.692163 +0.692038 0.691913 0.691788 0.691662 0.691537 0.691412 0.691287 0.691162 +0.691037 0.690911 0.690786 0.690661 0.690536 0.690411 0.690285 0.69016 +0.690035 0.68991 0.689785 0.689659 0.689534 0.689409 0.689284 0.689159 +0.689034 0.688908 0.688783 0.688658 0.688533 0.688408 0.688282 0.688157 +0.688032 0.687907 0.687782 0.687656 0.687531 0.687406 0.687281 0.687156 +0.687031 0.686905 0.68678 0.686655 0.68653 0.686405 0.686279 0.686154 +0.686029 0.685904 0.685779 0.685654 0.685528 0.685403 0.685278 0.685153 +0.685028 0.684902 0.684777 0.684652 0.684527 0.684402 0.684276 0.684151 +0.684026 0.683901 0.683776 0.68365 0.683525 0.6834 0.683275 0.68315 +0.683025 0.682899 0.682774 0.682649 0.682524 0.682399 0.682273 0.682148 +0.682023 0.681898 0.681773 0.681647 0.681522 0.681397 0.681272 0.681147 +0.681022 0.680896 0.680771 0.680646 0.680521 0.680396 0.68027 0.680145 +0.68002 0.679895 0.67977 0.679644 0.679519 0.679394 0.679269 0.679144 +0.679019 0.678893 0.678768 0.678643 0.678518 0.678393 0.678267 0.678142 +0.678017 0.677892 0.677767 0.677641 0.677516 0.677391 0.677266 0.677141 +0.677016 0.67689 0.676765 0.67664 0.676515 0.67639 0.676264 0.676139 +0.676014 0.675889 0.675764 0.675638 0.675513 0.675388 0.675263 0.675138 +0.675013 0.674887 0.674762 0.674637 0.674512 0.674387 0.674261 0.674136 +0.674011 0.673886 0.673761 0.673635 0.67351 0.673385 0.67326 0.673135 +0.67301 0.672884 0.672759 0.672634 0.672509 0.672384 0.672258 0.672133 +0.672008 0.671883 0.671758 0.671632 0.671507 0.671382 0.671257 0.671132 +0.671007 0.670881 0.670756 0.670631 0.670506 0.670381 0.670255 0.67013 +0.670005 0.66988 0.669755 0.669629 0.669504 0.669379 0.669254 0.669129 +0.669003 0.668878 0.668753 0.668628 0.668503 0.668378 0.668252 0.668127 +0.668002 0.667877 0.667752 0.667626 0.667501 0.667376 0.667251 0.667126 +0.667 0.666875 0.66675 0.666625 0.6665 0.666375 0.666249 0.666124 0.665999 +0.665874 0.665749 0.665623 0.665498 0.665373 0.665248 0.665123 0.664998 +0.664872 0.664747 0.664622 0.664497 0.664372 0.664246 0.664121 0.663996 +0.663871 0.663746 0.66362 0.663495 0.66337 0.663245 0.66312 0.662995 +0.662869 0.662744 0.662619 0.662494 0.662369 0.662243 0.662118 0.661993 +0.661868 0.661743 0.661617 0.661492 0.661367 0.661242 0.661117 0.660991 +0.660866 0.660741 0.660616 0.660491 0.660366 0.66024 0.660115 0.65999 +0.659865 0.65974 0.659614 0.659489 0.659364 0.659239 0.659114 0.658988 +0.658863 0.658738 0.658613 0.658488 0.658363 0.658237 0.658112 0.657987 +0.657862 0.657737 0.657611 0.657486 0.657361 0.657236 0.657111 0.656985 +0.65686 0.656735 0.65661 0.656485 0.65636 0.656234 0.656109 0.655984 +0.655859 0.655734 0.655608 0.655483 0.655358 0.655233 0.655108 0.654982 +0.654857 0.654732 0.654607 0.654482 0.654357 0.654231 0.654106 0.653981 +0.653856 0.653731 0.653605 0.65348 0.653355 0.65323 0.653105 0.652979 +0.652854 0.652729 0.652604 0.652479 0.652354 0.652228 0.652103 0.651978 +0.651853 0.651728 0.651602 0.651477 0.651352 0.651227 0.651102 0.650976 +0.650851 0.650726 0.650601 0.650476 0.650351 0.650225 0.6501; +#A 3000 0.649975 0.64985 0.649725 0.649599 0.649474 0.649349 0.649224 +0.649099 0.648973 0.648848 0.648723 0.648598 0.648473 0.648347 0.648222 +0.648097 0.647972 0.647847 0.647722 0.647596 0.647471 0.647346 0.647221 +0.647096 0.64697 0.646845 0.64672 0.646595 0.64647 0.646345 0.646219 +0.646094 0.645969 0.645844 0.645719 0.645593 0.645468 0.645343 0.645218 +0.645093 0.644967 0.644842 0.644717 0.644592 0.644467 0.644342 0.644216 +0.644091 0.643966 0.643841 0.643716 0.64359 0.643465 0.64334 0.643215 +0.64309 0.642964 0.642839 0.642714 0.642589 0.642464 0.642339 0.642213 +0.642088 0.641963 0.641838 0.641713 0.641587 0.641462 0.641337 0.641212 +0.641087 0.640961 0.640836 0.640711 0.640586 0.640461 0.640336 0.64021 +0.640085 0.63996 0.639835 0.63971 0.639584 0.639459 0.639334 0.639209 +0.639084 0.638958 0.638833 0.638708 0.638583 0.638458 0.638332 0.638207 +0.638082 0.637957 0.637832 0.637707 0.637581 0.637456 0.637331 0.637206 +0.637081 0.636955 0.63683 0.636705 0.63658 0.636455 0.636329 0.636204 +0.636079 0.635954 0.635829 0.635704 0.635578 0.635453 0.635328 0.635203 +0.635078 0.634952 0.634827 0.634702 0.634577 0.634452 0.634327 0.634201 +0.634076 0.633951 0.633826 0.633701 0.633575 0.63345 0.633325 0.6332 +0.633075 0.632949 0.632824 0.632699 0.632574 0.632449 0.632324 0.632198 +0.632073 0.631948 0.631823 0.631698 0.631572 0.631447 0.631322 0.631197 +0.631072 0.630946 0.630821 0.630696 0.630571 0.630446 0.63032 0.630195 +0.63007 0.629945 0.62982 0.629695 0.629569 0.629444 0.629319 0.629194 +0.629069 0.628943 0.628818 0.628693 0.628568 0.628443 0.628317 0.628192 +0.628067 0.627942 0.627817 0.627692 0.627566 0.627441 0.627316 0.627191 +0.627066 0.62694 0.626815 0.62669 0.626565 0.62644 0.626314 0.626189 +0.626064 0.625939 0.625814 0.625689 0.625563 0.625438 0.625313 0.625188 +0.625063 0.624937 0.624812 0.624687 0.624562 0.624437 0.624311 0.624186 +0.624061 0.623936 0.623811 0.623686 0.62356 0.623435 0.62331 0.623185 +0.62306 0.622934 0.622809 0.622684 0.622559 0.622434 0.622308 0.622183 +0.622058 0.621933 0.621808 0.621683 0.621557 0.621432 0.621307 0.621182 +0.621057 0.620931 0.620806 0.620681 0.620556 0.620431 0.620305 0.62018 +0.620055 0.61993 0.619805 0.61968 0.619554 0.619429 0.619304 0.619179 +0.619054 0.618928 0.618803 0.618678 0.618553 0.618428 0.618302 0.618177 +0.618052 0.617927 0.617802 0.617676 0.617551 0.617426 0.617301 0.617176 +0.617051 0.616925 0.6168 0.616675 0.61655 0.616425 0.616299 0.616174 +0.616049 0.615924 0.615799 0.615673 0.615548 0.615423 0.615298 0.615173 +0.615048 0.614922 0.614797 0.614672 0.614547 0.614422 0.614296 0.614171 +0.614046 0.613921 0.613796 0.613671 0.613545 0.61342 0.613295 0.61317 +0.613045 0.612919 0.612794 0.612669 0.612544 0.612419 0.612293 0.612168 +0.612043 0.611918 0.611793 0.611668 0.611542 0.611417 0.611292 0.611167 +0.611042 0.610916 0.610791 0.610666 0.610541 0.610416 0.61029 0.610165 +0.61004 0.609915 0.60979 0.609664 0.609539 0.609414 0.609289 0.609164 +0.609039 0.608913 0.608788 0.608663 0.608538 0.608413 0.608287 0.608162 +0.608037 0.607912 0.607787 0.607661 0.607536 0.607411 0.607286 0.607161 +0.607036 0.60691 0.606785 0.60666 0.606535 0.60641 0.606284 0.606159 +0.606034 0.605909 0.605784 0.605658 0.605533 0.605408 0.605283 0.605158 +0.605033 0.604907 0.604782 0.604657 0.604532 0.604407 0.604281 0.604156 +0.604031 0.603906 0.603781 0.603655 0.60353 0.603405 0.60328 0.603155 +0.60303 0.602904 0.602779 0.602654 0.602529 0.602404 0.602278 0.602153 +0.602028 0.601903 0.601778 0.601653 0.601527 0.601402 0.601277 0.601152 +0.601027 0.600901 0.600776 0.600651 0.600526 0.600401 0.600275 0.60015 +0.600025 0.5999 0.599775 0.599649 0.599524 0.599399 0.599274 0.599149 +0.599024 0.598898 0.598773 0.598648 0.598523 0.598398 0.598272 0.598147 +0.598022 0.597897 0.597772 0.597646 0.597521 0.597396 0.597271 0.597146 +0.597021 0.596895 0.59677 0.596645 0.59652 0.596395 0.596269 0.596144 +0.596019 0.595894 0.595769 0.595643 0.595518 0.595393 0.595268 0.595143 +0.595018 0.594892 0.594767 0.594642 0.594517 0.594392 0.594266 0.594141 +0.594016 0.593891 0.593766 0.59364 0.593515 0.59339 0.593265 0.59314 +0.593015 0.592889 0.592764 0.592639 0.592514 0.592389 0.592263 0.592138 +0.592013 0.591888 0.591763 0.591637 0.591512 0.591387 0.591262 0.591137 +0.591012 0.590886 0.590761 0.590636 0.590511 0.590386 0.59026 0.590135 +0.59001 0.589885 0.58976 0.589634 0.589509 0.589384 0.589259 0.589134 +0.589009 0.588883 0.588758 0.588633 0.588508 0.588383 0.588257 0.588132 +0.588007 0.587882 0.587757 0.587631 0.587506 0.587381 0.587256 0.587131 +0.587005 0.58688 0.586755 0.58663 0.586505 0.58638 0.586254 0.586129 +0.586004 0.585879 0.585754 0.585628 0.585503 0.585378 0.585253 0.585128 +0.585002 0.584877 0.584752 0.584627 0.584502 0.584377 0.584251 0.584126 +0.584001 0.583876 0.583751 0.583625 0.5835 0.583375 0.58325 0.583125 +0.583 0.582874 0.582749 0.582624 0.582499 0.582374 0.582248 0.582123 +0.581998 0.581873 0.581748 0.581622 0.581497 0.581372 0.581247 0.581122 +0.580997 0.580871 0.580746 0.580621 0.580496 0.580371 0.580245 0.58012 +0.579995 0.57987 0.579745 0.579619 0.579494 0.579369 0.579244 0.579119 +0.578993 0.578868 0.578743 0.578618 0.578493 0.578368 0.578242 0.578117 +0.577992 0.577867 0.577742 0.577616 0.577491 0.577366 0.577241 0.577116 +0.57699 0.576865 0.57674 0.576615 0.57649 0.576365 0.576239 0.576114 +0.575989 0.575864 0.575739 0.575613 0.575488 0.575363 0.575238 0.575113 +0.574987 0.574862 0.574737 0.574612 0.574487 0.574362 0.574236 0.574111 +0.573986 0.573861 0.573736 0.57361 0.573485 0.57336 0.573235 0.57311 +0.572984 0.572859 0.572734 0.572609 0.572484 0.572359 0.572233 0.572108 +0.571983 0.571858 0.571733 0.571607 0.571482 0.571357 0.571232 0.571107 +0.570981 0.570856 0.570731 0.570606 0.570481 0.570356 0.57023 0.570105 +0.56998 0.569855 0.56973 0.569604 0.569479 0.569354 0.569229 0.569104 +0.568978 0.568853 0.568728 0.568603 0.568478 0.568353 0.568227 0.568102 +0.567977 0.567852 0.567727 0.567601 0.567476 0.567351 0.567226 0.567101 +0.566975 0.56685 0.566725 0.5666 0.566475 0.56635 0.566224 0.566099 +0.565974 0.565849 0.565724 0.565598 0.565473 0.565348 0.565223 0.565098 +0.564972 0.564847 0.564722 0.564597 0.564472 0.564346 0.564221 0.564096 +0.563971 0.563846 0.563721 0.563595 0.56347 0.563345 0.56322 0.563095 +0.562969 0.562844 0.562719 0.562594 0.562469 0.562344 0.562218 0.562093 +0.561968 0.561843 0.561718 0.561592 0.561467 0.561342 0.561217 0.561092 +0.560966 0.560841 0.560716 0.560591 0.560466 0.560341 0.560215 0.56009 +0.559965 0.55984 0.559715 0.559589 0.559464 0.559339 0.559214 0.559089 +0.558963 0.558838 0.558713 0.558588 0.558463 0.558338 0.558212 0.558087 +0.557962 0.557837 0.557712 0.557586 0.557461 0.557336 0.557211 0.557086 +0.55696 0.556835 0.55671 0.556585 0.55646 0.556334 0.556209 0.556084 +0.555959 0.555834 0.555709 0.555583 0.555458 0.555333 0.555208 0.555083 +0.554957 0.554832 0.554707 0.554582 0.554457 0.554331 0.554206 0.554081 +0.553956 0.553831 0.553706 0.55358 0.553455 0.55333 0.553205 0.55308 +0.552954 0.552829 0.552704 0.552579 0.552454 0.552328 0.552203 0.552078 +0.551953 0.551828 0.551703 0.551577 0.551452 0.551327 0.551202 0.551077 +0.550951 0.550826 0.550701 0.550576 0.550451 0.550326 0.5502 0.550075 +0.54995 0.549825 0.5497 0.549574 0.549449 0.549324 0.549199 0.549074 +0.548948 0.548823 0.548698 0.548573 0.548448 0.548322 0.548197 0.548072 +0.547947 0.547822 0.547697 0.547571 0.547446 0.547321 0.547196 0.547071 +0.546945 0.54682 0.546695 0.54657 0.546445 0.546319 0.546194 0.546069 +0.545944 0.545819 0.545694 0.545568 0.545443 0.545318 0.545193 0.545068 +0.544942 0.544817 0.544692 0.544567 0.544442 0.544316 0.544191 0.544066 +0.543941 0.543816 0.543691 0.543565 0.54344 0.543315 0.54319 0.543065 +0.542939 0.542814 0.542689 0.542564 0.542439 0.542313 0.542188 0.542063 +0.541938 0.541813 0.541688 0.541562 0.541437 0.541312 0.541187 0.541062 +0.540936 0.540811 0.540686 0.540561 0.540436 0.54031 0.540185 0.54006 +0.539935 0.53981 0.539685 0.539559 0.539434 0.539309 0.539184 0.539059 +0.538933 0.538808 0.538683 0.538558 0.538433 0.538307 0.538182 0.538057 +0.537932 0.537807 0.537682 0.537556 0.537431 0.537306 0.537181 0.537056 +0.53693 0.536805 0.53668 0.536555 0.53643 0.536304 0.536179 0.536054 +0.535929 0.535804 0.535679 0.535553 0.535428 0.535303 0.535178 0.535053 +0.534927 0.534802 0.534677 0.534552 0.534427 0.534301 0.534176 0.534051 +0.533926 0.533801 0.533675 0.53355 0.533425 0.5333 0.533175 0.53305 +0.532924 0.532799 0.532674 0.532549 0.532424 0.532298 0.532173 0.532048 +0.531923 0.531798 0.531673 0.531547 0.531422 0.531297 0.531172 0.531047 +0.530921 0.530796 0.530671 0.530546 0.530421 0.530295 0.53017 0.530045 +0.52992 0.529795 0.52967 0.529544 0.529419 0.529294 0.529169 0.529044 +0.528918 0.528793 0.528668 0.528543 0.528418 0.528292 0.528167 0.528042 +0.527917 0.527792 0.527667 0.527541 0.527416 0.527291 0.527166 0.527041 +0.526915 0.52679 0.526665 0.52654 0.526415 0.526289 0.526164 0.526039 +0.525914 0.525789 0.525663 0.525538 0.525413 0.525288 0.525163 0.525038 +0.524912; +#A 4000 0.524787 0.524662 0.524537 0.524412 0.524286 0.524161 0.524036 +0.523911 0.523786 0.52366 0.523535 0.52341 0.523285 0.52316 0.523035 +0.522909 0.522784 0.522659 0.522534 0.522409 0.522283 0.522158 0.522033 +0.521908 0.521783 0.521657 0.521532 0.521407 0.521282 0.521157 0.521032 +0.520906 0.520781 0.520656 0.520531 0.520406 0.52028 0.520155 0.52003 +0.519905 0.51978 0.519654 0.519529 0.519404 0.519279 0.519154 0.519029 +0.518903 0.518778 0.518653 0.518528 0.518403 0.518277 0.518152 0.518027 +0.517902 0.517777 0.517651 0.517526 0.517401 0.517276 0.517151 0.517026 +0.5169 0.516775 0.51665 0.516525 0.5164 0.516274 0.516149 0.516024 +0.515899 0.515774 0.515648 0.515523 0.515398 0.515273 0.515148 0.515023 +0.514897 0.514772 0.514647 0.514522 0.514397 0.514271 0.514146 0.514021 +0.513896 0.513771 0.513645 0.51352 0.513395 0.51327 0.513145 0.51302 +0.512894 0.512769 0.512644 0.512519 0.512394 0.512268 0.512143 0.512018 +0.511893 0.511768 0.511642 0.511517 0.511392 0.511267 0.511142 0.511017 +0.510891 0.510766 0.510641 0.510516 0.510391 0.510265 0.51014 0.510015 +0.50989 0.509765 0.509639 0.509514 0.509389 0.509264 0.509139 0.509014 +0.508888 0.508763 0.508638 0.508513 0.508388 0.508262 0.508137 0.508012 +0.507887 0.507762 0.507636 0.507511 0.507386 0.507261 0.507136 0.507011 +0.506885 0.50676 0.506635 0.50651 0.506385 0.506259 0.506134 0.506009 +0.505884 0.505759 0.505633 0.505508 0.505383 0.505258 0.505133 0.505008 +0.504882 0.504757 0.504632 0.504507 0.504382 0.504256 0.504131 0.504006 +0.503881 0.503756 0.50363 0.503505 0.50338 0.503255 0.50313 0.503004 +0.502879 0.502754 0.502629 0.502504 0.502379 0.502253 0.502128 0.502003 +0.501878 0.501753 0.501627 0.501502 0.501377 0.501252 0.501127 0.501001 +0.500876 0.500751 0.500626 0.500501 0.500376 0.50025 0.500125 0.5 0.499875 +0.49975 0.499624 0.499499 0.499374 0.499249 0.499124 0.498998 0.498873 +0.498748 0.498623 0.498498 0.498373 0.498247 0.498122 0.497997 0.497872 +0.497747 0.497621 0.497496 0.497371 0.497246 0.497121 0.496995 0.49687 +0.496745 0.49662 0.496495 0.49637 0.496244 0.496119 0.495994 0.495869 +0.495744 0.495618 0.495493 0.495368 0.495243 0.495118 0.494992 0.494867 +0.494742 0.494617 0.494492 0.494367 0.494241 0.494116 0.493991 0.493866 +0.493741 0.493615 0.49349 0.493365 0.49324 0.493115 0.492989 0.492864 +0.492739 0.492614 0.492489 0.492364 0.492238 0.492113 0.491988 0.491863 +0.491738 0.491612 0.491487 0.491362 0.491237 0.491112 0.490986 0.490861 +0.490736 0.490611 0.490486 0.490361 0.490235 0.49011 0.489985 0.48986 +0.489735 0.489609 0.489484 0.489359 0.489234 0.489109 0.488983 0.488858 +0.488733 0.488608 0.488483 0.488358 0.488232 0.488107 0.487982 0.487857 +0.487732 0.487606 0.487481 0.487356 0.487231 0.487106 0.48698 0.486855 +0.48673 0.486605 0.48648 0.486355 0.486229 0.486104 0.485979 0.485854 +0.485729 0.485603 0.485478 0.485353 0.485228 0.485103 0.484977 0.484852 +0.484727 0.484602 0.484477 0.484352 0.484226 0.484101 0.483976 0.483851 +0.483726 0.4836 0.483475 0.48335 0.483225 0.4831 0.482974 0.482849 +0.482724 0.482599 0.482474 0.482349 0.482223 0.482098 0.481973 0.481848 +0.481723 0.481597 0.481472 0.481347 0.481222 0.481097 0.480971 0.480846 +0.480721 0.480596 0.480471 0.480346 0.48022 0.480095 0.47997 0.479845 +0.47972 0.479594 0.479469 0.479344 0.479219 0.479094 0.478968 0.478843 +0.478718 0.478593 0.478468 0.478343 0.478217 0.478092 0.477967 0.477842 +0.477717 0.477591 0.477466 0.477341 0.477216 0.477091 0.476965 0.47684 +0.476715 0.47659 0.476465 0.47634 0.476214 0.476089 0.475964 0.475839 +0.475714 0.475588 0.475463 0.475338 0.475213 0.475088 0.474962 0.474837 +0.474712 0.474587 0.474462 0.474337 0.474211 0.474086 0.473961 0.473836 +0.473711 0.473585 0.47346 0.473335 0.47321 0.473085 0.472959 0.472834 +0.472709 0.472584 0.472459 0.472333 0.472208 0.472083 0.471958 0.471833 +0.471708 0.471582 0.471457 0.471332 0.471207 0.471082 0.470956 0.470831 +0.470706 0.470581 0.470456 0.470331 0.470205 0.47008 0.469955 0.46983 +0.469705 0.469579 0.469454 0.469329 0.469204 0.469079 0.468953 0.468828 +0.468703 0.468578 0.468453 0.468327 0.468202 0.468077 0.467952 0.467827 +0.467702 0.467576 0.467451 0.467326 0.467201 0.467076 0.46695 0.466825 +0.4667 0.466575 0.46645 0.466324 0.466199 0.466074 0.465949 0.465824 +0.465699 0.465573 0.465448 0.465323 0.465198 0.465073 0.464947 0.464822 +0.464697 0.464572 0.464447 0.464321 0.464196 0.464071 0.463946 0.463821 +0.463696 0.46357 0.463445 0.46332 0.463195 0.46307 0.462944 0.462819 +0.462694 0.462569 0.462444 0.462318 0.462193 0.462068 0.461943 0.461818 +0.461693 0.461567 0.461442 0.461317 0.461192 0.461067 0.460941 0.460816 +0.460691 0.460566 0.460441 0.460315 0.46019 0.460065 0.45994 0.459815 +0.45969 0.459564 0.459439 0.459314 0.459189 0.459064 0.458938 0.458813 +0.458688 0.458563 0.458438 0.458312 0.458187 0.458062 0.457937 0.457812 +0.457687 0.457561 0.457436 0.457311 0.457186 0.457061 0.456935 0.45681 +0.456685 0.45656 0.456435 0.456309 0.456184 0.456059 0.455934 0.455809 +0.455684 0.455558 0.455433 0.455308 0.455183 0.455058 0.454932 0.454807 +0.454682 0.454557 0.454432 0.454306 0.454181 0.454056 0.453931 0.453806 +0.453681 0.453555 0.45343 0.453305 0.45318 0.453055 0.452929 0.452804 +0.452679 0.452554 0.452429 0.452303 0.452178 0.452053 0.451928 0.451803 +0.451678 0.451552 0.451427 0.451302 0.451177 0.451052 0.450926 0.450801 +0.450676 0.450551 0.450426 0.4503 0.450175 0.45005 0.449925 0.4498 +0.449675 0.449549 0.449424 0.449299 0.449174 0.449049 0.448923 0.448798 +0.448673 0.448548 0.448423 0.448297 0.448172 0.448047 0.447922 0.447797 +0.447672 0.447546 0.447421 0.447296 0.447171 0.447046 0.44692 0.446795 +0.44667 0.446545 0.44642 0.446294 0.446169 0.446044 0.445919 0.445794 +0.445668 0.445543 0.445418 0.445293 0.445168 0.445043 0.444917 0.444792 +0.444667 0.444542 0.444417 0.444291 0.444166 0.444041 0.443916 0.443791 +0.443666 0.44354 0.443415 0.44329 0.443165 0.44304 0.442914 0.442789 +0.442664 0.442539 0.442414 0.442288 0.442163 0.442038 0.441913 0.441788 +0.441662 0.441537 0.441412 0.441287 0.441162 0.441037 0.440911 0.440786 +0.440661 0.440536 0.440411 0.440285 0.44016 0.440035 0.43991 0.439785 +0.439659 0.439534 0.439409 0.439284 0.439159 0.439034 0.438908 0.438783 +0.438658 0.438533 0.438408 0.438282 0.438157 0.438032 0.437907 0.437782 +0.437656 0.437531 0.437406 0.437281 0.437156 0.437031 0.436905 0.43678 +0.436655 0.43653 0.436405 0.436279 0.436154 0.436029 0.435904 0.435779 +0.435653 0.435528 0.435403 0.435278 0.435153 0.435028 0.434902 0.434777 +0.434652 0.434527 0.434402 0.434276 0.434151 0.434026 0.433901 0.433776 +0.43365 0.433525 0.4334 0.433275 0.43315 0.433025 0.432899 0.432774 +0.432649 0.432524 0.432399 0.432273 0.432148 0.432023 0.431898 0.431773 +0.431647 0.431522 0.431397 0.431272 0.431147 0.431022 0.430896 0.430771 +0.430646 0.430521 0.430396 0.43027 0.430145 0.43002 0.429895 0.42977 +0.429644 0.429519 0.429394 0.429269 0.429144 0.429019 0.428893 0.428768 +0.428643 0.428518 0.428393 0.428267 0.428142 0.428017 0.427892 0.427767 +0.427641 0.427516 0.427391 0.427266 0.427141 0.427016 0.42689 0.426765 +0.42664 0.426515 0.42639 0.426264 0.426139 0.426014 0.425889 0.425764 +0.425638 0.425513 0.425388 0.425263 0.425138 0.425013 0.424887 0.424762 +0.424637 0.424512 0.424387 0.424261 0.424136 0.424011 0.423886 0.423761 +0.423635 0.42351 0.423385 0.42326 0.423135 0.42301 0.422884 0.422759 +0.422634 0.422509 0.422384 0.422258 0.422133 0.422008 0.421883 0.421758 +0.421632 0.421507 0.421382 0.421257 0.421132 0.421007 0.420881 0.420756 +0.420631 0.420506 0.420381 0.420255 0.42013 0.420005 0.41988 0.419755 +0.419629 0.419504 0.419379 0.419254 0.419129 0.419004 0.418878 0.418753 +0.418628 0.418503 0.418378 0.418252 0.418127 0.418002 0.417877 0.417752 +0.417626 0.417501 0.417376 0.417251 0.417126 0.417001 0.416875 0.41675 +0.416625 0.4165 0.416375 0.416249 0.416124 0.415999 0.415874 0.415749 +0.415623 0.415498 0.415373 0.415248 0.415123 0.414997 0.414872 0.414747 +0.414622 0.414497 0.414372 0.414246 0.414121 0.413996 0.413871 0.413746 +0.41362 0.413495 0.41337 0.413245 0.41312 0.412995 0.412869 0.412744 +0.412619 0.412494 0.412369 0.412243 0.412118 0.411993 0.411868 0.411743 +0.411617 0.411492 0.411367 0.411242 0.411117 0.410991 0.410866 0.410741 +0.410616 0.410491 0.410366 0.41024 0.410115 0.40999 0.409865 0.40974 +0.409614 0.409489 0.409364 0.409239 0.409114 0.408988 0.408863 0.408738 +0.408613 0.408488 0.408363 0.408237 0.408112 0.407987 0.407862 0.407737 +0.407611 0.407486 0.407361 0.407236 0.407111 0.406985 0.40686 0.406735 +0.40661 0.406485 0.40636 0.406234 0.406109 0.405984 0.405859 0.405734 +0.405608 0.405483 0.405358 0.405233 0.405108 0.404982 0.404857 0.404732 +0.404607 0.404482 0.404357 0.404231 0.404106 0.403981 0.403856 0.403731 +0.403605 0.40348 0.403355 0.40323 0.403105 0.402979 0.402854 0.402729 +0.402604 0.402479 0.402354 0.402228 0.402103 0.401978 0.401853 0.401728 +0.401602 0.401477 0.401352 0.401227 0.401102 0.400976 0.400851 0.400726 +0.400601 0.400476 0.400351 0.400225 0.4001 0.399975 0.39985 0.399725 +; +#A 5000 0.399599 0.399474 0.399349 0.399224 0.399099 0.398973 0.398848 +0.398723 0.398598 0.398473 0.398348 0.398222 0.398097 0.397972 0.397847 +0.397722 0.397596 0.397471 0.397346 0.397221 0.397096 0.39697 0.396845 +0.39672 0.396595 0.39647 0.396345 0.396219 0.396094 0.395969 0.395844 +0.395719 0.395593 0.395468 0.395343 0.395218 0.395093 0.394967 0.394842 +0.394717 0.394592 0.394467 0.394341 0.394216 0.394091 0.393966 0.393841 +0.393716 0.39359 0.393465 0.39334 0.393215 0.39309 0.392964 0.392839 +0.392714 0.392589 0.392464 0.392339 0.392213 0.392088 0.391963 0.391838 +0.391713 0.391587 0.391462 0.391337 0.391212 0.391087 0.390961 0.390836 +0.390711 0.390586 0.390461 0.390336 0.39021 0.390085 0.38996 0.389835 +0.38971 0.389584 0.389459 0.389334 0.389209 0.389084 0.388958 0.388833 +0.388708 0.388583 0.388458 0.388332 0.388207 0.388082 0.387957 0.387832 +0.387707 0.387581 0.387456 0.387331 0.387206 0.387081 0.386955 0.38683 +0.386705 0.38658 0.386455 0.38633 0.386204 0.386079 0.385954 0.385829 +0.385704 0.385578 0.385453 0.385328 0.385203 0.385078 0.384952 0.384827 +0.384702 0.384577 0.384452 0.384326 0.384201 0.384076 0.383951 0.383826 +0.383701 0.383575 0.38345 0.383325 0.3832 0.383075 0.382949 0.382824 +0.382699 0.382574 0.382449 0.382323 0.382198 0.382073 0.381948 0.381823 +0.381698 0.381572 0.381447 0.381322 0.381197 0.381072 0.380946 0.380821 +0.380696 0.380571 0.380446 0.38032 0.380195 0.38007 0.379945 0.37982 +0.379695 0.379569 0.379444 0.379319 0.379194 0.379069 0.378943 0.378818 +0.378693 0.378568 0.378443 0.378317 0.378192 0.378067 0.377942 0.377817 +0.377692 0.377566 0.377441 0.377316 0.377191 0.377066 0.37694 0.376815 +0.37669 0.376565 0.37644 0.376314 0.376189 0.376064 0.375939 0.375814 +0.375689 0.375563 0.375438 0.375313 0.375188 0.375063 0.374937 0.374812 +0.374687 0.374562 0.374437 0.374311 0.374186 0.374061 0.373936 0.373811 +0.373686 0.37356 0.373435 0.37331 0.373185 0.37306 0.372934 0.372809 +0.372684 0.372559 0.372434 0.372308 0.372183 0.372058 0.371933 0.371808 +0.371683 0.371557 0.371432 0.371307 0.371182 0.371057 0.370931 0.370806 +0.370681 0.370556 0.370431 0.370305 0.37018 0.370055 0.36993 0.369805 +0.36968 0.369554 0.369429 0.369304 0.369179 0.369054 0.368928 0.368803 +0.368678 0.368553 0.368428 0.368302 0.368177 0.368052 0.367927 0.367802 +0.367677 0.367551 0.367426 0.367301 0.367176 0.367051 0.366925 0.3668 +0.366675 0.36655 0.366425 0.366299 0.366174 0.366049 0.365924 0.365799 +0.365674 0.365548 0.365423 0.365298 0.365173 0.365048 0.364922 0.364797 +0.364672 0.364547 0.364422 0.364296 0.364171 0.364046 0.363921 0.363796 +0.36367 0.363545 0.36342 0.363295 0.36317 0.363045 0.362919 0.362794 +0.362669 0.362544 0.362419 0.362293 0.362168 0.362043 0.361918 0.361793 +0.361668 0.361542 0.361417 0.361292 0.361167 0.361042 0.360916 0.360791 +0.360666 0.360541 0.360416 0.36029 0.360165 0.36004 0.359915 0.35979 +0.359664 0.359539 0.359414 0.359289 0.359164 0.359039 0.358913 0.358788 +0.358663 0.358538 0.358413 0.358287 0.358162 0.358037 0.357912 0.357787 +0.357661 0.357536 0.357411 0.357286 0.357161 0.357036 0.35691 0.356785 +0.35666 0.356535 0.35641 0.356284 0.356159 0.356034 0.355909 0.355784 +0.355659 0.355533 0.355408 0.355283 0.355158 0.355033 0.354907 0.354782 +0.354657 0.354532 0.354407 0.354281 0.354156 0.354031 0.353906 0.353781 +0.353655 0.35353 0.353405 0.35328 0.353155 0.35303 0.352904 0.352779 +0.352654 0.352529 0.352404 0.352278 0.352153 0.352028 0.351903 0.351778 +0.351652 0.351527 0.351402 0.351277 0.351152 0.351027 0.350901 0.350776 +0.350651 0.350526 0.350401 0.350275 0.35015 0.350025 0.3499 0.349775 +0.349649 0.349524 0.349399 0.349274 0.349149 0.349024 0.348898 0.348773 +0.348648 0.348523 0.348398 0.348272 0.348147 0.348022 0.347897 0.347772 +0.347646 0.347521 0.347396 0.347271 0.347146 0.347021 0.346895 0.34677 +0.346645 0.34652 0.346395 0.346269 0.346144 0.346019 0.345894 0.345769 +0.345643 0.345518 0.345393 0.345268 0.345143 0.345018 0.344892 0.344767 +0.344642 0.344517 0.344392 0.344266 0.344141 0.344016 0.343891 0.343766 +0.34364 0.343515 0.34339 0.343265 0.34314 0.343015 0.342889 0.342764 +0.342639 0.342514 0.342389 0.342263 0.342138 0.342013 0.341888 0.341763 +0.341637 0.341512 0.341387 0.341262 0.341137 0.341012 0.340886 0.340761 +0.340636 0.340511 0.340386 0.34026 0.340135 0.34001 0.339885 0.33976 +0.339634 0.339509 0.339384 0.339259 0.339134 0.339009 0.338883 0.338758 +0.338633 0.338508 0.338383 0.338257 0.338132 0.338007 0.337882 0.337757 +0.337631 0.337506 0.337381 0.337256 0.337131 0.337005 0.33688 0.336755 +0.33663 0.336505 0.33638 0.336254 0.336129 0.336004 0.335879 0.335754 +0.335628 0.335503 0.335378 0.335253 0.335128 0.335003 0.334877 0.334752 +0.334627 0.334502 0.334377 0.334251 0.334126 0.334001 0.333876 0.333751 +0.333625 0.3335 0.333375 0.33325 0.333125 0.332999 0.332874 0.332749 +0.332624 0.332499 0.332374 0.332248 0.332123 0.331998 0.331873 0.331748 +0.331622 0.331497 0.331372 0.331247 0.331122 0.330996 0.330871 0.330746 +0.330621 0.330496 0.330371 0.330245 0.33012 0.329995 0.32987 0.329745 +0.329619 0.329494 0.329369 0.329244 0.329119 0.328993 0.328868 0.328743 +0.328618 0.328493 0.328368 0.328242 0.328117 0.327992 0.327867 0.327742 +0.327616 0.327491 0.327366 0.327241 0.327116 0.32699 0.326865 0.32674 +0.326615 0.32649 0.326365 0.326239 0.326114 0.325989 0.325864 0.325739 +0.325613 0.325488 0.325363 0.325238 0.325113 0.324987 0.324862 0.324737 +0.324612 0.324487 0.324362 0.324236 0.324111 0.323986 0.323861 0.323736 +0.32361 0.323485 0.32336 0.323235 0.32311 0.322984 0.322859 0.322734 +0.322609 0.322484 0.322359 0.322233 0.322108 0.321983 0.321858 0.321733 +0.321607 0.321482 0.321357 0.321232 0.321107 0.320981 0.320856 0.320731 +0.320606 0.320481 0.320356 0.32023 0.320105 0.31998 0.319855 0.31973 +0.319604 0.319479 0.319354 0.319229 0.319104 0.318978 0.318853 0.318728 +0.318603 0.318478 0.318353 0.318227 0.318102 0.317977 0.317852 0.317727 +0.317601 0.317476 0.317351 0.317226 0.317101 0.316975 0.31685 0.316725 +0.3166 0.316475 0.31635 0.316224 0.316099 0.315974 0.315849 0.315724 +0.315598 0.315473 0.315348 0.315223 0.315098 0.314972 0.314847 0.314722 +0.314597 0.314472 0.314347 0.314221 0.314096 0.313971 0.313846 0.313721 +0.313595 0.31347 0.313345 0.31322 0.313095 0.312969 0.312844 0.312719 +0.312594 0.312469 0.312344 0.312218 0.312093 0.311968 0.311843 0.311718 +0.311592 0.311467 0.311342 0.311217 0.311092 0.310966 0.310841 0.310716 +0.310591 0.310466 0.310341 0.310215 0.31009 0.309965 0.30984 0.309715 +0.309589 0.309464 0.309339 0.309214 0.309089 0.308963 0.308838 0.308713 +0.308588 0.308463 0.308338 0.308212 0.308087 0.307962 0.307837 0.307712 +0.307586 0.307461 0.307336 0.307211 0.307086 0.30696 0.306835 0.30671 +0.306585 0.30646 0.306334 0.306209 0.306084 0.305959 0.305834 0.305709 +0.305583 0.305458 0.305333 0.305208 0.305083 0.304957 0.304832 0.304707 +0.304582 0.304457 0.304332 0.304206 0.304081 0.303956 0.303831 0.303706 +0.30358 0.303455 0.30333 0.303205 0.30308 0.302954 0.302829 0.302704 +0.302579 0.302454 0.302328 0.302203 0.302078 0.301953 0.301828 0.301703 +0.301577 0.301452 0.301327 0.301202 0.301077 0.300951 0.300826 0.300701 +0.300576 0.300451 0.300325 0.3002 0.300075 0.29995 0.299825 0.2997 +0.299574 0.299449 0.299324 0.299199 0.299074 0.298948 0.298823 0.298698 +0.298573 0.298448 0.298322 0.298197 0.298072 0.297947 0.297822 0.297697 +0.297571 0.297446 0.297321 0.297196 0.297071 0.296945 0.29682 0.296695 +0.29657 0.296445 0.296319 0.296194 0.296069 0.295944 0.295819 0.295694 +0.295568 0.295443 0.295318 0.295193 0.295068 0.294942 0.294817 0.294692 +0.294567 0.294442 0.294316 0.294191 0.294066 0.293941 0.293816 0.293691 +0.293565 0.29344 0.293315 0.29319 0.293065 0.292939 0.292814 0.292689 +0.292564 0.292439 0.292313 0.292188 0.292063 0.291938 0.291813 0.291688 +0.291562 0.291437 0.291312 0.291187 0.291062 0.290936 0.290811 0.290686 +0.290561 0.290436 0.29031 0.290185 0.29006 0.289935 0.28981 0.289685 +0.289559 0.289434 0.289309 0.289184 0.289059 0.288933 0.288808 0.288683 +0.288558 0.288433 0.288307 0.288182 0.288057 0.287932 0.287807 0.287682 +0.287556 0.287431 0.287306 0.287181 0.287056 0.28693 0.286805 0.28668 +0.286555 0.28643 0.286304 0.286179 0.286054 0.285929 0.285804 0.285679 +0.285553 0.285428 0.285303 0.285178 0.285053 0.284927 0.284802 0.284677 +0.284552 0.284427 0.284301 0.284176 0.284051 0.283926 0.283801 0.283676 +0.28355 0.283425 0.2833 0.283175 0.28305 0.282924 0.282799 0.282674 +0.282549 0.282424 0.282298 0.282173 0.282048 0.281923 0.281798 0.281673 +0.281547 0.281422 0.281297 0.281172 0.281047 0.280921 0.280796 0.280671 +0.280546 0.280421 0.280295 0.28017 0.280045 0.27992 0.279795 0.279669 +0.279544 0.279419 0.279294 0.279169 0.279044 0.278918 0.278793 0.278668 +0.278543 0.278418 0.278292 0.278167 0.278042 0.277917 0.277792 0.277667 +0.277541 0.277416 0.277291 0.277166 0.277041 0.276915 0.27679 0.276665 +0.27654 0.276415 0.276289 0.276164 0.276039 0.275914 0.275789 0.275663 +0.275538 0.275413 0.275288 0.275163 0.275038 0.274912 0.274787 0.274662 +0.274537; +#A 6000 0.274412 0.274286 0.274161 0.274036 0.273911 0.273786 0.27366 +0.273535 0.27341 0.273285 0.27316 0.273035 0.272909 0.272784 0.272659 +0.272534 0.272409 0.272283 0.272158 0.272033 0.271908 0.271783 0.271657 +0.271532 0.271407 0.271282 0.271157 0.271032 0.270906 0.270781 0.270656 +0.270531 0.270406 0.27028 0.270155 0.27003 0.269905 0.26978 0.269654 +0.269529 0.269404 0.269279 0.269154 0.269029 0.268903 0.268778 0.268653 +0.268528 0.268403 0.268277 0.268152 0.268027 0.267902 0.267777 0.267651 +0.267526 0.267401 0.267276 0.267151 0.267026 0.2669 0.266775 0.26665 +0.266525 0.2664 0.266274 0.266149 0.266024 0.265899 0.265774 0.265648 +0.265523 0.265398 0.265273 0.265148 0.265023 0.264897 0.264772 0.264647 +0.264522 0.264397 0.264271 0.264146 0.264021 0.263896 0.263771 0.263645 +0.26352 0.263395 0.26327 0.263145 0.26302 0.262894 0.262769 0.262644 +0.262519 0.262394 0.262268 0.262143 0.262018 0.261893 0.261768 0.261642 +0.261517 0.261392 0.261267 0.261142 0.261017 0.260891 0.260766 0.260641 +0.260516 0.260391 0.260265 0.26014 0.260015 0.25989 0.259765 0.259639 +0.259514 0.259389 0.259264 0.259139 0.259014 0.258888 0.258763 0.258638 +0.258513 0.258388 0.258262 0.258137 0.258012 0.257887 0.257762 0.257636 +0.257511 0.257386 0.257261 0.257136 0.257011 0.256885 0.25676 0.256635 +0.25651 0.256385 0.256259 0.256134 0.256009 0.255884 0.255759 0.255633 +0.255508 0.255383 0.255258 0.255133 0.255008 0.254882 0.254757 0.254632 +0.254507 0.254382 0.254256 0.254131 0.254006 0.253881 0.253756 0.25363 +0.253505 0.25338 0.253255 0.25313 0.253005 0.252879 0.252754 0.252629 +0.252504 0.252379 0.252253 0.252128 0.252003 0.251878 0.251753 0.251627 +0.251502 0.251377 0.251252 0.251127 0.251002 0.250876 0.250751 0.250626 +0.250501 0.250376 0.25025 0.250125 0.25 0.249875 0.24975 0.249624 0.249499 +0.249374 0.249249 0.249124 0.248998 0.248873 0.248748 0.248623 0.248498 +0.248373 0.248247 0.248122 0.247997 0.247872 0.247747 0.247621 0.247496 +0.247371 0.247246 0.247121 0.246995 0.24687 0.246745 0.24662 0.246495 +0.24637 0.246244 0.246119 0.245994 0.245869 0.245744 0.245618 0.245493 +0.245368 0.245243 0.245118 0.244992 0.244867 0.244742 0.244617 0.244492 +0.244367 0.244241 0.244116 0.243991 0.243866 0.243741 0.243615 0.24349 +0.243365 0.24324 0.243115 0.242989 0.242864 0.242739 0.242614 0.242489 +0.242364 0.242238 0.242113 0.241988 0.241863 0.241738 0.241612 0.241487 +0.241362 0.241237 0.241112 0.240986 0.240861 0.240736 0.240611 0.240486 +0.240361 0.240235 0.24011 0.239985 0.23986 0.239735 0.239609 0.239484 +0.239359 0.239234 0.239109 0.238983 0.238858 0.238733 0.238608 0.238483 +0.238358 0.238232 0.238107 0.237982 0.237857 0.237732 0.237606 0.237481 +0.237356 0.237231 0.237106 0.23698 0.236855 0.23673 0.236605 0.23648 +0.236355 0.236229 0.236104 0.235979 0.235854 0.235729 0.235603 0.235478 +0.235353 0.235228 0.235103 0.234977 0.234852 0.234727 0.234602 0.234477 +0.234352 0.234226 0.234101 0.233976 0.233851 0.233726 0.2336 0.233475 +0.23335 0.233225 0.2331 0.232974 0.232849 0.232724 0.232599 0.232474 +0.232349 0.232223 0.232098 0.231973 0.231848 0.231723 0.231597 0.231472 +0.231347 0.231222 0.231097 0.230971 0.230846 0.230721 0.230596 0.230471 +0.230346 0.23022 0.230095 0.22997 0.229845 0.22972 0.229594 0.229469 +0.229344 0.229219 0.229094 0.228968 0.228843 0.228718 0.228593 0.228468 +0.228343 0.228217 0.228092 0.227967 0.227842 0.227717 0.227591 0.227466 +0.227341 0.227216 0.227091 0.226965 0.22684 0.226715 0.22659 0.226465 +0.22634 0.226214 0.226089 0.225964 0.225839 0.225714 0.225588 0.225463 +0.225338 0.225213 0.225088 0.224962 0.224837 0.224712 0.224587 0.224462 +0.224337 0.224211 0.224086 0.223961 0.223836 0.223711 0.223585 0.22346 +0.223335 0.22321 0.223085 0.222959 0.222834 0.222709 0.222584 0.222459 +0.222334 0.222208 0.222083 0.221958 0.221833 0.221708 0.221582 0.221457 +0.221332 0.221207 0.221082 0.220956 0.220831 0.220706 0.220581 0.220456 +0.22033 0.220205 0.22008 0.219955 0.21983 0.219705 0.219579 0.219454 +0.219329 0.219204 0.219079 0.218953 0.218828 0.218703 0.218578 0.218453 +0.218327 0.218202 0.218077 0.217952 0.217827 0.217702 0.217576 0.217451 +0.217326 0.217201 0.217076 0.21695 0.216825 0.2167 0.216575 0.21645 +0.216324 0.216199 0.216074 0.215949 0.215824 0.215699 0.215573 0.215448 +0.215323 0.215198 0.215073 0.214947 0.214822 0.214697 0.214572 0.214447 +0.214321 0.214196 0.214071 0.213946 0.213821 0.213696 0.21357 0.213445 +0.21332 0.213195 0.21307 0.212944 0.212819 0.212694 0.212569 0.212444 +0.212318 0.212193 0.212068 0.211943 0.211818 0.211693 0.211567 0.211442 +0.211317 0.211192 0.211067 0.210941 0.210816 0.210691 0.210566 0.210441 +0.210315 0.21019 0.210065 0.20994 0.209815 0.20969 0.209564 0.209439 +0.209314 0.209189 0.209064 0.208938 0.208813 0.208688 0.208563 0.208438 +0.208312 0.208187 0.208062 0.207937 0.207812 0.207687 0.207561 0.207436 +0.207311 0.207186 0.207061 0.206935 0.20681 0.206685 0.20656 0.206435 +0.206309 0.206184 0.206059 0.205934 0.205809 0.205684 0.205558 0.205433 +0.205308 0.205183 0.205058 0.204932 0.204807 0.204682 0.204557 0.204432 +0.204306 0.204181 0.204056 0.203931 0.203806 0.203681 0.203555 0.20343 +0.203305 0.20318 0.203055 0.202929 0.202804 0.202679 0.202554 0.202429 +0.202303 0.202178 0.202053 0.201928 0.201803 0.201678 0.201552 0.201427 +0.201302 0.201177 0.201052 0.200926 0.200801 0.200676 0.200551 0.200426 +0.2003 0.200175 0.20005 0.199925 0.1998 0.199675 0.199549 0.199424 +0.199299 0.199174 0.199049 0.198923 0.198798 0.198673 0.198548 0.198423 +0.198297 0.198172 0.198047 0.197922 0.197797 0.197672 0.197546 0.197421 +0.197296 0.197171 0.197046 0.19692 0.196795 0.19667 0.196545 0.19642 +0.196294 0.196169 0.196044 0.195919 0.195794 0.195669 0.195543 0.195418 +0.195293 0.195168 0.195043 0.194917 0.194792 0.194667 0.194542 0.194417 +0.194291 0.194166 0.194041 0.193916 0.193791 0.193666 0.19354 0.193415 +0.19329 0.193165 0.19304 0.192914 0.192789 0.192664 0.192539 0.192414 +0.192288 0.192163 0.192038 0.191913 0.191788 0.191662 0.191537 0.191412 +0.191287 0.191162 0.191037 0.190911 0.190786 0.190661 0.190536 0.190411 +0.190285 0.19016 0.190035 0.18991 0.189785 0.189659 0.189534 0.189409 +0.189284 0.189159 0.189034 0.188908 0.188783 0.188658 0.188533 0.188408 +0.188282 0.188157 0.188032 0.187907 0.187782 0.187656 0.187531 0.187406 +0.187281 0.187156 0.187031 0.186905 0.18678 0.186655 0.18653 0.186405 +0.186279 0.186154 0.186029 0.185904 0.185779 0.185653 0.185528 0.185403 +0.185278 0.185153 0.185028 0.184902 0.184777 0.184652 0.184527 0.184402 +0.184276 0.184151 0.184026 0.183901 0.183776 0.18365 0.183525 0.1834 +0.183275 0.18315 0.183025 0.182899 0.182774 0.182649 0.182524 0.182399 +0.182273 0.182148 0.182023 0.181898 0.181773 0.181647 0.181522 0.181397 +0.181272 0.181147 0.181022 0.180896 0.180771 0.180646 0.180521 0.180396 +0.18027 0.180145 0.18002 0.179895 0.17977 0.179644 0.179519 0.179394 +0.179269 0.179144 0.179019 0.178893 0.178768 0.178643 0.178518 0.178393 +0.178267 0.178142 0.178017 0.177892 0.177767 0.177641 0.177516 0.177391 +0.177266 0.177141 0.177016 0.17689 0.176765 0.17664 0.176515 0.17639 +0.176264 0.176139 0.176014 0.175889 0.175764 0.175638 0.175513 0.175388 +0.175263 0.175138 0.175013 0.174887 0.174762 0.174637 0.174512 0.174387 +0.174261 0.174136 0.174011 0.173886 0.173761 0.173635 0.17351 0.173385 +0.17326 0.173135 0.17301 0.172884 0.172759 0.172634 0.172509 0.172384 +0.172258 0.172133 0.172008 0.171883 0.171758 0.171632 0.171507 0.171382 +0.171257 0.171132 0.171007 0.170881 0.170756 0.170631 0.170506 0.170381 +0.170255 0.17013 0.170005 0.16988 0.169755 0.169629 0.169504 0.169379 +0.169254 0.169129 0.169004 0.168878 0.168753 0.168628 0.168503 0.168378 +0.168252 0.168127 0.168002 0.167877 0.167752 0.167626 0.167501 0.167376 +0.167251 0.167126 0.167001 0.166875 0.16675 0.166625 0.1665 0.166375 +0.166249 0.166124 0.165999 0.165874 0.165749 0.165623 0.165498 0.165373 +0.165248 0.165123 0.164998 0.164872 0.164747 0.164622 0.164497 0.164372 +0.164246 0.164121 0.163996 0.163871 0.163746 0.16362 0.163495 0.16337 +0.163245 0.16312 0.162994 0.162869 0.162744 0.162619 0.162494 0.162369 +0.162243 0.162118 0.161993 0.161868 0.161743 0.161617 0.161492 0.161367 +0.161242 0.161117 0.160991 0.160866 0.160741 0.160616 0.160491 0.160366 +0.16024 0.160115 0.15999 0.159865 0.15974 0.159614 0.159489 0.159364 +0.159239 0.159114 0.158988 0.158863 0.158738 0.158613 0.158488 0.158363 +0.158237 0.158112 0.157987 0.157862 0.157737 0.157611 0.157486 0.157361 +0.157236 0.157111 0.156985 0.15686 0.156735 0.15661 0.156485 0.15636 +0.156234 0.156109 0.155984 0.155859 0.155734 0.155608 0.155483 0.155358 +0.155233 0.155108 0.154982 0.154857 0.154732 0.154607 0.154482 0.154357 +0.154231 0.154106 0.153981 0.153856 0.153731 0.153605 0.15348 0.153355 +0.15323 0.153105 0.152979 0.152854 0.152729 0.152604 0.152479 0.152354 +0.152228 0.152103 0.151978 0.151853 0.151728 0.151602 0.151477 0.151352 +0.151227 0.151102 0.150976 0.150851 0.150726 0.150601 0.150476 0.150351 +0.150225 0.1501 0.149975 0.14985 0.149725 0.149599 0.149474 0.149349 +; +#A 7000 0.149224 0.149099 0.148973 0.148848 0.148723 0.148598 0.148473 +0.148348 0.148222 0.148097 0.147972 0.147847 0.147722 0.147596 0.147471 +0.147346 0.147221 0.147096 0.14697 0.146845 0.14672 0.146595 0.14647 +0.146345 0.146219 0.146094 0.145969 0.145844 0.145719 0.145593 0.145468 +0.145343 0.145218 0.145093 0.144967 0.144842 0.144717 0.144592 0.144467 +0.144342 0.144216 0.144091 0.143966 0.143841 0.143716 0.14359 0.143465 +0.14334 0.143215 0.14309 0.142964 0.142839 0.142714 0.142589 0.142464 +0.142339 0.142213 0.142088 0.141963 0.141838 0.141713 0.141587 0.141462 +0.141337 0.141212 0.141087 0.140961 0.140836 0.140711 0.140586 0.140461 +0.140336 0.14021 0.140085 0.13996 0.139835 0.13971 0.139584 0.139459 +0.139334 0.139209 0.139084 0.138958 0.138833 0.138708 0.138583 0.138458 +0.138333 0.138207 0.138082 0.137957 0.137832 0.137707 0.137581 0.137456 +0.137331 0.137206 0.137081 0.136955 0.13683 0.136705 0.13658 0.136455 +0.136329 0.136204 0.136079 0.135954 0.135829 0.135704 0.135578 0.135453 +0.135328 0.135203 0.135078 0.134952 0.134827 0.134702 0.134577 0.134452 +0.134326 0.134201 0.134076 0.133951 0.133826 0.133701 0.133575 0.13345 +0.133325 0.1332 0.133075 0.132949 0.132824 0.132699 0.132574 0.132449 +0.132323 0.132198 0.132073 0.131948 0.131823 0.131698 0.131572 0.131447 +0.131322 0.131197 0.131072 0.130946 0.130821 0.130696 0.130571 0.130446 +0.13032 0.130195 0.13007 0.129945 0.12982 0.129695 0.129569 0.129444 +0.129319 0.129194 0.129069 0.128943 0.128818 0.128693 0.128568 0.128443 +0.128317 0.128192 0.128067 0.127942 0.127817 0.127692 0.127566 0.127441 +0.127316 0.127191 0.127066 0.12694 0.126815 0.12669 0.126565 0.12644 +0.126314 0.126189 0.126064 0.125939 0.125814 0.125689 0.125563 0.125438 +0.125313 0.125188 0.125063 0.124937 0.124812 0.124687 0.124562 0.124437 +0.124311 0.124186 0.124061 0.123936 0.123811 0.123686 0.12356 0.123435 +0.12331 0.123185 0.12306 0.122934 0.122809 0.122684 0.122559 0.122434 +0.122308 0.122183 0.122058 0.121933 0.121808 0.121683 0.121557 0.121432 +0.121307 0.121182 0.121057 0.120931 0.120806 0.120681 0.120556 0.120431 +0.120305 0.12018 0.120055 0.11993 0.119805 0.11968 0.119554 0.119429 +0.119304 0.119179 0.119054 0.118928 0.118803 0.118678 0.118553 0.118428 +0.118302 0.118177 0.118052 0.117927 0.117802 0.117677 0.117551 0.117426 +0.117301 0.117176 0.117051 0.116925 0.1168 0.116675 0.11655 0.116425 +0.116299 0.116174 0.116049 0.115924 0.115799 0.115674 0.115548 0.115423 +0.115298 0.115173 0.115048 0.114922 0.114797 0.114672 0.114547 0.114422 +0.114296 0.114171 0.114046 0.113921 0.113796 0.113671 0.113545 0.11342 +0.113295 0.11317 0.113045 0.112919 0.112794 0.112669 0.112544 0.112419 +0.112293 0.112168 0.112043 0.111918 0.111793 0.111667 0.111542 0.111417 +0.111292 0.111167 0.111042 0.110916 0.110791 0.110666 0.110541 0.110416 +0.11029 0.110165 0.11004 0.109915 0.10979 0.109664 0.109539 0.109414 +0.109289 0.109164 0.109039 0.108913 0.108788 0.108663 0.108538 0.108413 +0.108287 0.108162 0.108037 0.107912 0.107787 0.107661 0.107536 0.107411 +0.107286 0.107161 0.107036 0.10691 0.106785 0.10666 0.106535 0.10641 +0.106284 0.106159 0.106034 0.105909 0.105784 0.105658 0.105533 0.105408 +0.105283 0.105158 0.105033 0.104907 0.104782 0.104657 0.104532 0.104407 +0.104281 0.104156 0.104031 0.103906 0.103781 0.103655 0.10353 0.103405 +0.10328 0.103155 0.10303 0.102904 0.102779 0.102654 0.102529 0.102404 +0.102278 0.102153 0.102028 0.101903 0.101778 0.101652 0.101527 0.101402 +0.101277 0.101152 0.101027 0.100901 0.100776 0.100651 0.100526 0.100401 +0.100275 0.10015 0.100025 0.0998999 0.0997747 0.0996495 0.0995243 0.0993991 +0.0992739 0.0991487 0.0990235 0.0988984 0.0987732 0.098648 0.0985228 +0.0983976 0.0982724 0.0981472 0.098022 0.0978968 0.0977717 0.0976465 +0.0975213 0.0973961 0.0972709 0.0971457 0.0970205 0.0968953 0.0967702 +0.096645 0.0965198 0.0963946 0.0962694 0.0961442 0.096019 0.0958938 +0.0957687 0.0956435 0.0955183 0.0953931 0.0952679 0.0951427 0.0950175 +0.0948923 0.0947672 0.094642 0.0945168 0.0943916 0.0942664 0.0941412 +0.094016 0.0938908 0.0937656 0.0936405 0.0935153 0.0933901 0.0932649 +0.0931397 0.0930145 0.0928893 0.0927641 0.092639 0.0925138 0.0923886 +0.0922634 0.0921382 0.092013 0.0918878 0.0917626 0.0916375 0.0915123 +0.0913871 0.0912619 0.0911367 0.0910115 0.0908863 0.0907611 0.090636 +0.0905108 0.0903856 0.0902604 0.0901352 0.09001 0.0898848 0.0897596 +0.0896344 0.0895093 0.0893841 0.0892589 0.0891337 0.0890085 0.0888833 +0.0887581 0.0886329 0.0885078 0.0883826 0.0882574 0.0881322 0.088007 +0.0878818 0.0877566 0.0876314 0.0875063 0.0873811 0.0872559 0.0871307 +0.0870055 0.0868803 0.0867551 0.0866299 0.0865048 0.0863796 0.0862544 +0.0861292 0.086004 0.0858788 0.0857536 0.0856284 0.0855033 0.0853781 +0.0852529 0.0851277 0.0850025 0.0848773 0.0847521 0.0846269 0.0845018 +0.0843766 0.0842514 0.0841262 0.084001 0.0838758 0.0837506 0.0836254 +0.0835003 0.0833751 0.0832499 0.0831247 0.0829995 0.0828743 0.0827491 +0.0826239 0.0824988 0.0823736 0.0822484 0.0821232 0.081998 0.0818728 +0.0817476 0.0816224 0.0814972 0.0813721 0.0812469 0.0811217 0.0809965 +0.0808713 0.0807461 0.0806209 0.0804957 0.0803706 0.0802454 0.0801202 +0.079995 0.0798698 0.0797446 0.0796194 0.0794942 0.0793691 0.0792439 +0.0791187 0.0789935 0.0788683 0.0787431 0.0786179 0.0784927 0.0783676 +0.0782424 0.0781172 0.077992 0.0778668 0.0777416 0.0776164 0.0774912 +0.077366 0.0772409 0.0771157 0.0769905 0.0768653 0.0767401 0.0766149 +0.0764897 0.0763645 0.0762394 0.0761142 0.075989 0.0758638 0.0757386 +0.0756134 0.0754882 0.075363 0.0752379 0.0751127 0.0749875 0.0748623 +0.0747371 0.0746119 0.0744867 0.0743615 0.0742364 0.0741112 0.073986 +0.0738608 0.0737356 0.0736104 0.0734852 0.07336 0.0732348 0.0731097 +0.0729845 0.0728593 0.0727341 0.0726089 0.0724837 0.0723585 0.0722333 +0.0721082 0.071983 0.0718578 0.0717326 0.0716074 0.0714822 0.071357 +0.0712318 0.0711067 0.0709815 0.0708563 0.0707311 0.0706059 0.0704807 +0.0703555 0.0702303 0.0701052 0.06998 0.0698548 0.0697296 0.0696044 +0.0694792 0.069354 0.0692288 0.0691037 0.0689785 0.0688533 0.0687281 +0.0686029 0.0684777 0.0683525 0.0682273 0.0681022 0.067977 0.0678518 +0.0677266 0.0676014 0.0674762 0.067351 0.0672258 0.0671007 0.0669755 +0.0668503 0.0667251 0.0665999 0.0664747 0.0663495 0.0662243 0.0660992 +0.065974 0.0658488 0.0657236 0.0655984 0.0654732 0.065348 0.0652228 +0.0650976 0.0649725 0.0648473 0.0647221 0.0645969 0.0644717 0.0643465 +0.0642213 0.0640961 0.063971 0.0638458 0.0637206 0.0635954 0.0634702 +0.063345 0.0632198 0.0630946 0.0629695 0.0628443 0.0627191 0.0625939 +0.0624687 0.0623435 0.0622183 0.0620931 0.061968 0.0618428 0.0617176 +0.0615924 0.0614672 0.061342 0.0612168 0.0610916 0.0609665 0.0608413 +0.0607161 0.0605909 0.0604657 0.0603405 0.0602153 0.0600901 0.0599649 +0.0598398 0.0597146 0.0595894 0.0594642 0.059339 0.0592138 0.0590886 +0.0589634 0.0588383 0.0587131 0.0585879 0.0584627 0.0583375 0.0582123 +0.0580871 0.0579619 0.0578368 0.0577116 0.0575864 0.0574612 0.057336 +0.0572108 0.0570856 0.0569604 0.0568353 0.0567101 0.0565849 0.0564597 +0.0563345 0.0562093 0.0560841 0.0559589 0.0558337 0.0557086 0.0555834 +0.0554582 0.055333 0.0552078 0.0550826 0.0549574 0.0548322 0.0547071 +0.0545819 0.0544567 0.0543315 0.0542063 0.0540811 0.0539559 0.0538307 +0.0537056 0.0535804 0.0534552 0.05333 0.0532048 0.0530796 0.0529544 +0.0528292 0.0527041 0.0525789 0.0524537 0.0523285 0.0522033 0.0520781 +0.0519529 0.0518277 0.0517026 0.0515774 0.0514522 0.051327 0.0512018 +0.0510766 0.0509514 0.0508262 0.0507011 0.0505759 0.0504507 0.0503255 +0.0502003 0.0500751 0.0499499 0.0498247 0.0496995 0.0495744 0.0494492 +0.049324 0.0491988 0.0490736 0.0489484 0.0488232 0.048698 0.0485729 +0.0484477 0.0483225 0.0481973 0.0480721 0.0479469 0.0478217 0.0476965 +0.0475714 0.0474462 0.047321 0.0471958 0.0470706 0.0469454 0.0468202 +0.046695 0.0465699 0.0464447 0.0463195 0.0461943 0.0460691 0.0459439 +0.0458187 0.0456935 0.0455684 0.0454432 0.045318 0.0451928 0.0450676 +0.0449424 0.0448172 0.044692 0.0445669 0.0444417 0.0443165 0.0441913 +0.0440661 0.0439409 0.0438157 0.0436905 0.0435653 0.0434402 0.043315 +0.0431898 0.0430646 0.0429394 0.0428142 0.042689 0.0425638 0.0424387 +0.0423135 0.0421883 0.0420631 0.0419379 0.0418127 0.0416875 0.0415623 +0.0414372 0.041312 0.0411868 0.0410616 0.0409364 0.0408112 0.040686 +0.0405608 0.0404357 0.0403105 0.0401853 0.0400601 0.0399349 0.0398097 +0.0396845 0.0395593 0.0394341 0.039309 0.0391838 0.0390586 0.0389334 +0.0388082 0.038683 0.0385578 0.0384327 0.0383075 0.0381823 0.0380571 +0.0379319 0.0378067 0.0376815 0.0375563 0.0374311 0.037306 0.0371808 +0.0370556 0.0369304 0.0368052 0.03668 0.0365548 0.0364296 0.0363045 +0.0361793 0.0360541 0.0359289 0.0358037 0.0356785 0.0355533 0.0354281 +0.035303 0.0351778 0.0350526 0.0349274 0.0348022 0.034677 0.0345518 +0.0344266 0.0343015 0.0341763 0.0340511 0.0339259 0.0338007 0.0336755 +0.0335503 0.0334251 0.0332999 0.0331748 0.0330496 0.0329244 0.0327992 +0.032674 0.0325488 0.0324236 0.0322984 0.0321733 0.0320481 0.0319229 +0.0317977 0.0316725 0.0315473 0.0314221 0.0312969 0.0311718 0.0310466 +0.0309214 0.0307962 0.030671 0.0305458 0.0304206 0.0302954 0.0301703 +0.0300451 0.0299199 0.0297947 0.0296695 0.0295443 0.0294191 0.0292939 +0.0291688 0.0290436 0.0289184 0.0287932 0.028668 0.0285428 0.0284176 +0.0282924 0.0281673 0.0280421 0.0279169 0.0277917 0.0276665 0.0275413 +0.0274161 0.0272909 0.0271657 0.0270406 0.0269154 0.0267902 0.026665 +0.0265398 0.0264146 0.0262894 0.0261642 0.0260391 0.0259139 0.0257887 +0.0256635 0.0255383 0.0254131 0.0252879 0.0251627 0.0250376 0.0249124 +0.0247872 0.024662 0.0245368 0.0244116 0.0242864 0.0241612; +#A 8000 0.0240361 0.0239109 0.0237857 0.0236605 0.0235353 0.0234101 +0.0232849 0.0231597 0.0230346 0.0229094 0.0227842 0.022659 0.0225338 +0.0224086 0.0222834 0.0221582 0.022033 0.0219079 0.0217827 0.0216575 +0.0215323 0.0214071 0.0212819 0.0211567 0.0210315 0.0209064 0.0207812 +0.020656 0.0205308 0.0204056 0.0202804 0.0201552 0.02003 0.0199049 +0.0197797 0.0196545 0.0195293 0.0194041 0.0192789 0.0191537 0.0190285 +0.0189034 0.0187782 0.018653 0.0185278 0.0184026 0.0182774 0.0181522 +0.018027 0.0179019 0.0177767 0.0176515 0.0175263 0.0174011 0.0172759 +0.0171507 0.0170255 0.0169004 0.0167752 0.01665 0.0165248 0.0163996 +0.0162744 0.0161492 0.016024 0.0158988 0.0157737 0.0156485 0.0155233 +0.0153981 0.0152729 0.0151477 0.0150225 0.0148973 0.0147722 0.014647 +0.0145218 0.0143966 0.0142714 0.0141462 0.014021 0.0138958 0.0137707 +0.0136455 0.0135203 0.0133951 0.0132699 0.0131447 0.0130195 0.0128943 +0.0127692 0.012644 0.0125188 0.0123936 0.0122684 0.0121432 0.012018 +0.0118928 0.0117677 0.0116425 0.0115173 0.0113921 0.0112669 0.0111417 +0.0110165 0.0108913 0.0107661 0.010641 0.0105158 0.0103906 0.0102654 +0.0101402 0.010015 0.00988983 0.00976465 0.00963946 0.00951427 0.00938908 +0.0092639 0.00913871 0.00901352 0.00888833 0.00876314 0.00863796 0.00851277 +0.00838758 0.00826239 0.00813721 0.00801202 0.00788683 0.00776164 0.00763645 +0.00751127 0.00738608 0.00726089 0.0071357 0.00701052 0.00688533 0.00676014 +0.00663495 0.00650976 0.00638458 0.00625939 0.0061342 0.00600901 0.00588383 +0.00575864 0.00563345 0.00550826 0.00538307 0.00525789 0.0051327 0.00500751 +0.00488232 0.00475714 0.00463195 0.00450676 0.00438157 0.00425638 0.0041312 +0.00400601 0.00388082 0.00375563 0.00363045 0.00350526 0.00338007 0.00325488 +0.00312969 0.00300451 0.00287932 0.00275413 0.00262894 0.00250376 0.00237857 +0.00225338 0.00212819 0.002003 0.00187782 0.00175263 0.00162744 0.00150225 +0.00137707 0.00125188 0.00112669 0.0010015 0.000876314 0.000751127 +0.000625939 0.000500751 0.000375563 0.000250376 0.000125188; +#X coords 0 1 8191 -1 100 70 1; +#X restore 355 154 graph; +#X obj 26 197 function~ window; +#X msg 26 167 rcos; +#X obj 26 124 function~ waveform; +#X msg 26 100 addsyn 0 1 0.25; +#X obj 26 143 loadbang; +#X obj 26 372 granule~ waveform window; +#X msg 26 341 spray; +#X obj 26 445 dac~; +#X obj 26 417 *~ 0.2; +#X obj 224 417 *~ 0.2; +#X obj 168 296 metro 1000; +#X obj 168 275 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X msg 141 101 addsyn 0 0.1 0.3 0.5 0.3 0.1; +#N canvas 0 22 410 263 more-messages 0; +#X obj 13 191 outlet; +#X msg 159 175 steady \$1; +#X obj 159 153 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 176 155 steady rhythm; +#N canvas 0 22 643 386 tuning 0; +#X obj 63 252 outlet; +#X msg 91 121 setscale 110 123.75 139.219 146.667 165 185.625 208.828 +220 247.5 278.438 293.333 330 371.25 417.656 440 495 556.875 586.667 +660 742.5 835.312 880 990 1113.75 1173.33 1320 1485 1670.62 1760 1980 +; +#X obj 91 96 loadbang; +#X msg 227 236 pitchdev \$1; +#X floatatom 227 216 5 0 0 0 - - -, f 5; +#X obj 230 192 hsl 128 15 0 0.1 0 0 empty empty empty -2 -6 0 8 -260704 +-1 -1 0 1; +#N canvas 0 22 470 320 more-scales 0; +#X msg 53 65 setscale 440 495 556.875 586.667 660 742.5 835.312 880 +990 1113.75 1173.33 1320 1485 1670.62; +#X text 58 45 two octave Pythagorean; +#X msg 64 125 setscale 55 58.2705 61.7354 65.4064 69.2957 73.4162 77.7817 +82.4069 87.3071 92.4986 97.9989 103.826 110 116.541 123.471 130.813 +138.591 146.832 155.563 164.814 174.614 184.997 195.998 207.652 220 +233.082 246.942 261.626 277.183 293.665 311.127 329.628 349.228 369.994 +391.995 415.305 440 466.164 493.883 523.251 554.365 587.33 622.254 +659.255 698.456 739.989 783.991 830.609 880 932.328 987.767 1046.5 +1108.73 1174.66 1244.51 1318.51 1396.91 1479.98 1567.98 1661.22; +#X text 62 106 equal-tempered 12 tone; +#X msg 84 299 setscale 55 60.7249 67.0458 74.0245 81.7297 90.2369 99.6296 +110 121.45 134.092 148.049 163.459 180.474 199.259 220 242.9 268.183 +296.098 326.919 360.948 398.518 440 485.8 536.366 592.196 653.837 721.895 +797.037 880 971.599 1072.73 1184.39 1307.67 1443.79 1594.07; +#X text 79 279 equal-tempered 7 tone; +#X msg 94 422 setscale 220 247.5 278.438 293.333 330 440 495 556.875 +586.667 660 880 990 1113.75 1173.33 1320; +#X text 92 404 pentatonic; +#X obj 60 488 outlet; +#X connect 0 0 8 0; +#X connect 2 0 8 0; +#X connect 4 0 8 0; +#X connect 6 0 8 0; +#X restore 63 42 pd more-scales; +#X text 173 105 default: diatonic pythagorean; +#X msg 193 58 constrain_scale \$1; +#X obj 193 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X text 156 14 limit scale within freq constraints set by grist message +; +#X text 213 31 (if your boundaries are bad the constraints will be +ignored and the full scale will be used.); +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 8 0; +#X restore 100 68 pd tuning; +#X msg 204 76 transpose \$1; +#X floatatom 204 53 5 0 0 0 - - -, f 5; +#X text 203 34 global transposition; +#N canvas 0 22 244 162 initialize 0; +#X obj 9 76 s granule-master-gain-in; +#X msg 9 56 0.05; +#X obj 9 32 loadbang; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X restore 279 176 pd initialize; +#N canvas 0 22 478 328 grain-cloud-profile 0; +#X obj 35 235 outlet; +#X msg 79 20 grist 333 1000 50 5000 0 1 0.05 1 30 60; +#X msg 79 44 grist 250 1000 100 300 0.1 0.9 0.1 1 40 60; +#X msg 79 68 grist 30 1000 400 500 0.1 0.9 0.1 1 50 600; +#X msg 79 92 grist 10 1000 1200 1500 0.1 0.9 0.1 1 20 50; +#X msg 79 116 grist 3 1000 100 1500 0.1 0.9 0.1 1 1000 8000; +#X msg 85 200 events \$1; +#X floatatom 85 180 5 0 0 0 - - -, f 5; +#X text 127 177 specify events-per-cloud directly; +#X text 28 260 grist parameter sequence:; +#X text 28 274 events-per-cloud \, event horizon(ms.) \, min freq \, +max freq \,; +#X text 29 307 min grain-size(ms.) \, max grain-size; +#X text 28 290 left pan boundary \, right pan boundary \, min amp \, +max amp \,; +#X msg 83 136 grist 3 1000 200 800 0.1 0.9 0.1 1 2000 4000; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 13 0 0 0; +#X restore 13 38 pd grain-cloud-profile; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 9 0 0 0; +#X restore 387 356 pd more-messages; +#X floatatom 26 294 5 0 0 0 - - -, f 5; +#X msg 190 340 pitchspray; +#X msg 26 244 1; +#X obj 26 218 loadbang; +#X text 90 218 select method; +#X text 67 342 basic grain cloud; +#X obj 26 77 loadbang; +#X text 267 339 tuned grain cloud; +#X msg 36 268 2; +#X msg 96 170 aenv 0.025; +#N canvas 666 199 454 304 select-method 0; +#X obj 64 35 inlet; +#X obj 138 25 inlet; +#X obj 26 13 loadbang; +#X obj 138 223 spigot; +#X obj 193 224 spigot; +#X obj 230 188 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 175 185 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 64 132 unpack f f; +#X obj 64 65 sel 1 2; +#X msg 64 102 1 0; +#X msg 97 102 0 1; +#X obj 138 255 outlet; +#X obj 193 254 outlet; +#X connect 0 0 8 0; +#X connect 1 0 3 0; +#X connect 1 0 4 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 12 0; +#X connect 5 0 4 1; +#X connect 6 0 3 1; +#X connect 7 0 6 0; +#X connect 7 1 5 0; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 9 0 7 0; +#X connect 10 0 7 0; +#X restore 26 317 pd select-method; +#X obj 23 14 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 24 49 granule~ - granular synthesis; +#X text 91 80 generate waveform; +#X text 96 150 generate envelope; +#X text 60 244 spray; +#X text 69 268 pitchspray; +#X obj 349 300 hsl 128 15 0 1 0 0 granule-master-gain granule-master-gain-in +master_gain -2 -8 0 10 -261682 -1 -1 635 1; +#X floatatom 263 399 5 0 0 0 - granule-master-gain -, f 5; +#X floatatom 65 398 5 0 0 0 - granule-master-gain -, f 5; +#X text 332 358 comment; +#X text 167 253 Turn on to start grains (DACs must be on); +#X connect 3 0 2 0; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 10 0; +#X connect 7 1 11 0; +#X connect 8 0 7 0; +#X connect 10 0 9 0; +#X connect 11 0 9 1; +#X connect 12 0 26 1; +#X connect 13 0 12 0; +#X connect 14 0 4 0; +#X connect 15 0 7 0; +#X connect 16 0 26 0; +#X connect 17 0 7 0; +#X connect 18 0 16 0; +#X connect 19 0 18 0; +#X connect 22 0 5 0; +#X connect 24 0 16 0; +#X connect 25 0 2 0; +#X connect 26 0 8 0; +#X connect 26 1 17 0; +#X connect 34 0 11 1; +#X connect 35 0 10 1; diff --git a/externals/lyonpotpourri/granule~.c b/externals/lyonpotpourri/granule~.c new file mode 100755 index 000000000..019118df4 --- /dev/null +++ b/externals/lyonpotpourri/granule~.c @@ -0,0 +1 @@ +#include "MSPd.h" #define MAXGRAINS (512) // just for present to get lower overhead #define MAXSCALE (8192) #define OBJECT_NAME "granule~" static t_class *granule_class; typedef struct { float amplitude; float panL; float panR; long delay; // samples to wait until event starts long duration;// length in samples of event float phase; // phase for frequency oscillator float ephase; // phase for envelope float si; // sampling increment for frequency float esi; // sampling increment for envelope } t_grain; typedef struct { t_word *b_samples; long b_frames; long b_nchans; } t_pdbuffer; typedef struct _granule { t_object x_obj; float x_f; t_pdbuffer *wavebuf; // holds waveform samples t_pdbuffer *windowbuf; // holds window samples t_symbol *wavename; // name of waveform buffer t_symbol *windowname; // name of window buffer float sr; // sampling rate short mute; short hosed; // buffers are bad /* Global grain data*/ long events; // number of events in a block long horizon; // length of block for random events float minfreq; // minimum frequency for a grain float maxfreq; // maximum frequency for a grain float minpan; // minimum pan for a grain float maxpan; // maxium pan for a grain float minamp; // minimum amplitude for a grain float maxamp; // maximum amplitude for a grain float mindur; // minumum duration for a grain float maxdur; // maximum duration for a grain t_grain *grains; // stores grain data float *pitchscale; // contains a frequency grid for pitch constraint int pitchsteps; // number of members in scale float transpose; // factor for scaling all pitches float pitch_deviation; // factor to adjust scaled pitches short steady; // toggles pulsed rhythmic activity float lowblock_freq; //lowest allowed frequency float highblock_freq;// highest allowed frequency float mindur_ms;//store duration in ms float maxdur_ms;//ditto float horizon_ms;//ditto short constrain_scale;//flag to only use bounded portion of scale rather than all of it } t_granule; void granule_setbuf(t_granule *x, t_symbol *wavename, t_symbol *windowname); void *granule_new(t_symbol *msg, short argc, t_atom *argv); t_int *granule_perform(t_int *w); t_int *granule_performhose(t_int *w); void granule_dsp(t_granule *x, t_signal **sp); void granule_reload(t_granule *x); void granule_spray(t_granule *x); void granule_pitchspray(t_granule *x); void granule_transpose(t_granule *x, t_floatarg t); void granule_pitchdev(t_granule *x, t_floatarg d); void granule_lowblock(t_granule *x, t_floatarg f); void granule_highblock(t_granule *x, t_floatarg f); void granule_events(t_granule *x, t_floatarg e); float granule_boundrand(float min, float max); void *granule_grist(t_granule *x, t_symbol *msg, short argc, t_atom *argv); void *granule_grain(t_granule *x, t_symbol *msg, short argc, t_atom *argv); void *granule_setscale(t_granule *x, t_symbol *msg, short argc, t_atom *argv); void granule_info(t_granule *x); void granule_mute(t_granule *x, t_floatarg toggle); void granule_steady(t_granule *x, t_floatarg toggle); void granule_constrain_scale(t_granule *x, t_floatarg toggle); void granule_dsp_free(t_granule *x); void granule_init(t_granule *x,short initialized); void granule_constrain(int *index_min, int *index_max, float minfreq, float maxfreq, float *scale, int steps); void granule_tilde_setup(void){ granule_class = class_new(gensym("granule~"), (t_newmethod)granule_new, (t_method)granule_dsp_free,sizeof(t_granule), 0,A_GIMME,0); CLASS_MAINSIGNALIN(granule_class, t_granule, x_f); class_addmethod(granule_class,(t_method)granule_dsp,gensym("dsp"),0); class_addmethod(granule_class,(t_method)granule_mute,gensym("mute"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_setbuf,gensym("setbuf"),A_DEFSYM,A_DEFSYM,0); class_addmethod(granule_class,(t_method)granule_spray,gensym("spray"),0); class_addmethod(granule_class,(t_method)granule_info,gensym("info"),0); class_addmethod(granule_class,(t_method)granule_pitchspray,gensym("pitchspray"),0); class_addmethod(granule_class,(t_method)granule_transpose,gensym("transpose"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_events,gensym("events"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_pitchdev,gensym("pitchdev"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_lowblock,gensym("lowblock"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_highblock,gensym("highblock"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_steady,gensym("steady"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_constrain_scale,gensym("constrain_scale"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_grist,gensym("grist"),A_GIMME,0); class_addmethod(granule_class,(t_method)granule_grain,gensym("grain"),A_GIMME,0); class_addmethod(granule_class,(t_method)granule_setscale,gensym("setscale"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void granule_constrain_scale(t_granule *x, t_floatarg toggle) { x->constrain_scale = toggle; } void granule_lowblock(t_granule *x, t_floatarg f) { if(f > 0){ x->lowblock_freq = f; } } void granule_highblock(t_granule *x, t_floatarg f) { if(f > 0){ x->highblock_freq = f; } } void granule_pitchdev(t_granule *x, t_floatarg d) { if(d < 0 ){ error("pitch deviation must be positive"); return; } x->pitch_deviation = d; } void granule_mute(t_granule *x, t_floatarg toggle) { x->mute = toggle; } void granule_steady(t_granule *x, t_floatarg toggle) { x->steady = toggle; } void granule_events(t_granule *x, t_floatarg e) { if( e <= 0 ){ post("events must be positive!"); return; } x->events = e; // x->steady_dur = x->horizon / (float) x->events; } void granule_transpose(t_granule *x, t_floatarg t) { if( t <= 0 ){ error("transpose factor must be greater than zero!"); return; } x->transpose = t; } void *granule_setscale(t_granule *x, t_symbol *msg, short argc, t_atom *argv) { int i; float *pitchscale = x->pitchscale; if( argc >= MAXSCALE ){ error("%d is the maximum size scale", MAXSCALE); return 0; } if( argc < 2 ){ error("there must be at least 2 members in scale"); return 0; } for(i=0; i < argc; i++){ pitchscale[i] = atom_getfloatarg(i,argc,argv); } x->pitchsteps = argc; // post("read %d values into scale", x->pitchsteps); return 0; } void granule_constrain(int *index_min, int *index_max, float minfreq, float maxfreq, float *scale, int steps) { int imax = steps - 1; int imin = 0; while(scale[imin] < minfreq && imin < imax){ ++imin; } if(imin == imax){ // post("could not constrain minimum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } while(scale[imax] > maxfreq && imax > 0){ --imax; } if(imax < 1 || imax <= imin){ // post("could not constrain maximum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } *index_min = imin; *index_max = imax; } void granule_pitchspray(t_granule *x) { int i,j; long eframes = x->windowbuf->b_frames; long frames = x->wavebuf->b_frames; float sr = x->sr; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float minfreq = x->minfreq; // minimum frequency for a grain float maxfreq = x->maxfreq; // maximum frequency for a grain float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maxium pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar float lowblock_freq = x->lowblock_freq; float highblock_freq = x->highblock_freq; short steady = x->steady; float pitch_deviation = x->pitch_deviation; float pdev = 0; float pdev_invert = 0; // float pscale; float pan; int index_min, index_max; int steps = x->pitchsteps; float *scale = x->pitchscale; int windex; short inserted = 0; short constrain_scale = x->constrain_scale; t_grain *grains = x->grains; if( steps < 2 ){ error("scale is undefined"); return; } if( pitch_deviation ){ pdev = 1.0 + pitch_deviation; pdev_invert = 1.0 / pdev; } for( i = 0; i < x->events; i++ ){ inserted = 0; for(j = 0; j < MAXGRAINS; j++ ){ if( grains[j].ephase >= eframes ){ if(steady){ grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granule_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granule_boundrand(mindur, maxdur); grains[j].phase = 0.0; grains[j].ephase = 0.0; pan = granule_boundrand(minpan, maxpan); grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = granule_boundrand(minamp, maxamp); grains[j].esi = (float) eframes / (float) grains[j].duration ; if(constrain_scale){ granule_constrain(&index_min,&index_max,minfreq, maxfreq, scale, steps); windex = (int) granule_boundrand((float)index_min, (float)index_max); } else { windex = (int) granule_boundrand(0.0, (float)(steps-1)); } grains[j].si = transpose * scale[windex] * (float) frames / sr; if( pitch_deviation ){ grains[j].si *= granule_boundrand(pdev_invert,pdev); } /* must add this code to spray, and also do for high frequencies */ if(lowblock_freq > 0.0) { if(grains[j].si * (sr/frames) < lowblock_freq){ post("lowblock: aborted grain with %f frequency",grains[j].si * (sr/frames)); grains[j].ephase = eframes; // abort grain } } if(highblock_freq > 0.0) { if(grains[j].si * (sr/frames) > highblock_freq){ post("highblock: aborted grain with %f frequency, greater than %f", grains[j].si * (sr/frames), highblock_freq); grains[j].ephase = eframes; // abort grain } } inserted = 1; goto nextgrain; } } if(!inserted){ error("could not insert grain"); return; } nextgrain: ; } } void granule_spray(t_granule *x) { int i,j; long eframes = x->windowbuf->b_frames; long frames = x->wavebuf->b_frames; float sr = x->sr; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float minfreq = x->minfreq; // minimum frequency for a grain float maxfreq = x->maxfreq; // maximum frequency for a grain float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maxium pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar // float steady_dur = x->steady_dur; short steady = x->steady; float pan; t_grain *grains = x->grains; short inserted; for( i = 0; i < x->events; i++ ){ inserted = 0; for(j = 0; j < MAXGRAINS; j++ ){ if( grains[j].ephase >= eframes ){ if(steady){ grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granule_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granule_boundrand(mindur, maxdur); grains[j].phase = 0.0; grains[j].ephase = 0.0; pan = granule_boundrand(minpan, maxpan); grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = granule_boundrand(minamp, maxamp); grains[j].esi = (float) eframes / (float) grains[j].duration ; grains[j].si = transpose * granule_boundrand(minfreq, maxfreq) * (float) frames / sr; inserted = 1; goto nextgrain; } } if(! inserted){ error("could not insert grain"); return; } nextgrain: ; } } void *granule_grain(t_granule *x, t_symbol *msg, short argc, t_atom *argv) { short inserted; int j; float duration, frequency, amplitude, pan; t_grain *grains; long eframes; long frames; float sr; grains = x->grains; eframes = x->windowbuf->b_frames; frames = x->wavebuf->b_frames; sr = x->sr; if(argc < 4){ error("grain takes 4 arguments, not %d",argc); post("duration frequency amplitude pan"); return 0; } duration = atom_getintarg(0,argc,argv); frequency = atom_getfloatarg(1,argc,argv); // in ms amplitude = atom_getfloatarg(2,argc,argv); pan = atom_getfloatarg(3,argc,argv); if(duration <= 0.0){ error("illegal duration:%f",duration); return 0; } if(frequency <= 0.0){ error("illegal frequency:%f",frequency); return 0; } if(pan < 0.0 || pan > 1.0){ error("illegal pan:%f",pan); return 0; } inserted = 0; for(j = 0; j < MAXGRAINS; j++ ){ if( grains[j].ephase >= eframes ){ grains[j].delay = 0.0;// immediate deployment grains[j].duration = (long) (.001 * x->sr * duration); grains[j].phase = 0.0; grains[j].ephase = 0.0; grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = amplitude; grains[j].esi = (float) eframes / (float) grains[j].duration ; grains[j].si = frequency * (float) frames / sr; return 0; } } error("could not insert grain"); return 0; } float granule_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void *granule_new(t_symbol *msg, short argc, t_atom *argv) { t_granule *x = (t_granule *)pd_new(granule_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->wavebuf = (t_pdbuffer*)malloc(sizeof(t_pdbuffer)); x->windowbuf = (t_pdbuffer*)malloc(sizeof(t_pdbuffer)); srand(time(0)); x->pitchscale = (float *) t_getbytes(MAXSCALE * sizeof(float)); x->grains = (t_grain *) t_getbytes(MAXGRAINS * sizeof(t_grain)); // default names x->wavename = gensym("waveform"); x->windowname = gensym("window"); /* MaxMSP bug that may soon be fixed, this does not work: x->wavename = atom_getsymarg(0,argc,argv); x->windowname = atom_getsymarg(1,argc,argv); */ // apparently Pd lacks this Max/MSP bug x->wavename = atom_getsymbolarg(0,argc,argv); x->windowname = atom_getsymbolarg(1,argc,argv); x->sr = sys_getsr(); if(! x->sr ) x->sr = 44100; granule_init(x,0); return (x); } void granule_init(t_granule *x,short initialized) { int i; if(!initialized){ x->pitchsteps = 0; // we could predefine a 12t scale x->mute = 0; x->steady = 0; x->events = 10; x->horizon_ms = 1000; x->minfreq = 220.0; x->maxfreq = 880.0; x->minpan = .1; x->maxpan = .9; x->minamp = .1; x->maxamp = 1.0; x->mindur_ms = 150; x->maxdur_ms = 750; x->transpose = 1.0; x->pitch_deviation = 0.0; x->lowblock_freq = 0.0; // by default we do not block any frequencies x->highblock_freq = 0.0; // ditto x->constrain_scale = 0; } x->horizon = x->horizon_ms * .001 * x->sr; x->mindur = x->mindur_ms * .001 * x->sr; x->maxdur = x->maxdur_ms * .001 * x->sr; for( i = 0; i < MAXGRAINS; i++ ){ // this is what we test for a legal place to insert grain x->grains[i].ephase = 9999999999.0; } } void granule_info(t_granule *x) { int tcount = 0; t_grain *grains = x->grains; long eframes = x->windowbuf->b_frames; int i; for(i = 0; i < MAXGRAINS; i++ ){ if( grains[i].ephase < eframes ) ++tcount; } post("%d active grains", tcount); post("wavename %s", x->wavename->s_name); post("windowname %s", x->windowname->s_name); } void *granule_grist(t_granule *x, t_symbol *msg, short argc, t_atom *argv) { if(argc < 10 ){ error("grist takes 10 arguments:"); post("events horizon minfreq maxfreq minpan maxpan minamp maxamp mindur maxdur"); return 0; } x->events = atom_getintarg(0,argc,argv); x->horizon_ms = atom_getfloatarg(1,argc,argv); x->minfreq = atom_getfloatarg(2,argc,argv); x->maxfreq = atom_getfloatarg(3,argc,argv); x->minpan = atom_getfloatarg(4,argc,argv); x->maxpan = atom_getfloatarg(5,argc,argv); x->minamp = atom_getfloatarg(6,argc,argv); x->maxamp = atom_getfloatarg(7,argc,argv); x->mindur_ms = atom_getfloatarg(8,argc,argv); x->maxdur_ms = atom_getfloatarg(9,argc,argv); x->mindur = .001 * x->sr * x->mindur_ms ; x->maxdur = .001 * x->sr * x->maxdur_ms; x->horizon = .001 * x->sr * x->horizon_ms; if(x->minfreq < 0){ x->minfreq *= -1.0; } if(x->maxfreq < 0){ x->maxfreq *= -1.0; } if(x->minpan < 0.0) { x->minpan = 0.0; } if(x->maxpan > 1.0) { x->maxpan = 1.0; } if(x->events < 0){ x->events = 0; } return 0; } void granule_reload(t_granule *x) { granule_setbuf(x, x->wavename, x->windowname); } void granule_setbuf(t_granule *x, t_symbol *wavename, t_symbol *windowname) { t_garray *a; int frames; x->hosed = 0; x->wavebuf->b_frames = 0; x->windowbuf->b_frames = 0; x->wavebuf->b_nchans = 1; x->windowbuf->b_nchans = 1; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "granule~: %s: no such array", wavename->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->wavebuf->b_samples)) { pd_error(x, "%s: bad template for granule~", wavename->s_name); x->hosed = 1; } else { x->wavebuf->b_frames = frames; garray_usedindsp(a); } if (!(a = (t_garray *)pd_findbyclass(windowname, garray_class))) { if (*wavename->s_name) pd_error(x, "granule~: %s: no such array", windowname->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->windowbuf->b_samples)) { pd_error(x, "%s: bad template for granule~", windowname->s_name); x->hosed = 1; } else { x->windowbuf->b_frames = frames; garray_usedindsp(a); } } t_int *granule_performhose(t_int *w) { // t_granule *x = (t_granule *) (w[1]); float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; while(n--) *outputL++ = *outputR++ = 0; return (w+6); } t_int *granule_perform(t_int *w) { t_granule *x = (t_granule *) (w[1]); // float *in = (t_float *)(w[2]); // ignoring input float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; t_pdbuffer *wavebuf = x->wavebuf; t_pdbuffer *windowbuf = x->windowbuf; t_word *wavetable = wavebuf->b_samples; t_word *window = windowbuf->b_samples; t_grain *grains = x->grains; float sample; float envelope; float amplitude; float panL, panR; float si; float esi; float phase; float ephase; long delay; long frames = wavebuf->b_frames; long eframes = windowbuf->b_frames; int i,j; /* grain parameters */ if( x->mute ){ while(n--) *outputL++ = *outputR++ = 0; return (w+6); } // pre-clean buffer for( i = 0; i < n; i++ ){ outputL[i] = outputR[i] = 0; } for (j=0; j<MAXGRAINS; j++) { if(grains[j].ephase >= eframes){ goto nextgrain; } amplitude = grains[j].amplitude; si = grains[j].si; esi = grains[j].esi; phase = grains[j].phase; ephase = grains[j].ephase; delay = grains[j].delay; panL = grains[j].panL; panR = grains[j].panR; for(i = 0; i < n; i++ ){ // ++(x->sampcount); // not really needed if( delay > 0 ){ --delay; } if( delay <= 0 && ephase < eframes){ sample = wavetable[(int)phase].w_float; envelope = amplitude * window[(int)ephase].w_float; sample *= envelope; outputL[i] += panL * sample; outputR[i] += panR * sample; phase += si; ephase += esi; while( phase >= frames ) phase -= frames; if( ephase >= eframes ){ grains[j].ephase = ephase; goto nextgrain; // must escape loop now } } } grains[j].phase = phase; grains[j].ephase = ephase; grains[j].delay = delay; nextgrain: ; } return (w+6); } void granule_dsp_free(t_granule *x) { t_freebytes(x->grains, MAXGRAINS * sizeof(t_grain)); t_freebytes(x->pitchscale, MAXSCALE * sizeof(float)); } void granule_dsp(t_granule *x, t_signal **sp) { granule_reload(x); if( x->hosed ){ post("You need some valid buffers"); dsp_add(granule_performhose, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); return; } if( x->sr != sp[0]->s_sr){ x->sr = sp[0]->s_sr; if( !x->sr ){ post("warning: zero sampling rate!"); x->sr = 44100; } granule_init(x,1); } dsp_add(granule_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); } \ No newline at end of file diff --git a/externals/lyonpotpourri/kbuffer~-help.pd b/externals/lyonpotpourri/kbuffer~-help.pd new file mode 100755 index 000000000..c55bcd5f4 --- /dev/null +++ b/externals/lyonpotpourri/kbuffer~-help.pd @@ -0,0 +1,69 @@ +#N canvas 487 22 464 484 10; +#X obj 44 210 kbuffer~ 512 8000; +#X text 170 207 args: ksampling rate \, storage time (in ms.); +#N canvas 0 22 466 316 more-messages 0; +#X msg 238 89 size 4000; +#X obj 173 154 outlet; +#X text 170 212 reset size or srate; +#X msg 275 124 info; +#X msg 137 91 ksrate 1024; +#X connect 0 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X restore 302 170 pd more-messages; +#X msg 43 165 record; +#X msg 98 166 play; +#X msg 143 167 stop; +#X msg 186 167 speed \$1; +#X msg 261 167 loop; +#X obj 44 273 phasor~; +#X floatatom 160 258 5 0 0 0 - - -, f 5; +#X floatatom 26 136 5 0 0 2 kb-input kb-input -, f 5; +#X obj 82 363 hsl 128 15 300 1000 0 0 kb-input empty empty -2 -6 0 +8 -261119 -1 -1 0 1; +#X floatatom 131 127 5 0 0 0 - - -, f 5; +#X msg 129 104 1; +#X obj 44 392 *~ 0.1; +#X obj 44 422 dac~; +#X obj 129 83 loadbang; +#X text 177 122 try different playback speed \, negative OK; +#X text 80 335 hit record \; then perform some wiggles here:; +#X text 187 150 after done recording \, hit loop or play; +#X obj 22 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 44 308 killdc~; +#N canvas 0 22 222 238 monitor-phase 0; +#X obj 101 116 metro 100; +#X obj 101 97 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#X obj 101 144 snapshot~; +#X obj 101 42 loadbang; +#X msg 101 67 1; +#X obj 101 179 outlet; +#X obj 15 48 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 5 0; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 6 0 2 0; +#X restore 160 234 pd monitor-phase; +#X text 21 45 kbuffer~ lets you sample gestures with a lower sampling +rate than the audio rate., f 68; +#X connect 0 0 8 0; +#X connect 0 1 22 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 21 0; +#X connect 10 0 0 0; +#X connect 12 0 6 0; +#X connect 13 0 12 0; +#X connect 14 0 15 0; +#X connect 14 0 15 1; +#X connect 16 0 13 0; +#X connect 21 0 14 0; +#X connect 22 0 9 0; diff --git a/externals/lyonpotpourri/kbuffer~.c b/externals/lyonpotpourri/kbuffer~.c new file mode 100755 index 000000000..1e949bb88 --- /dev/null +++ b/externals/lyonpotpourri/kbuffer~.c @@ -0,0 +1,310 @@ +#include "MSPd.h" + +#define OBJECT_NAME "kbuffer~" + +static t_class *kbuffer_class; + +typedef struct _kbuffer +{ + + t_object x_obj; + float x_f; + float ksrate; + float srate; + float si; + float phase; + float duration; + int iphase; + int lastphase; + int length; + float *data; + float fval; + float lastval; + short record_flag; + short play_flag; + short dump_flag; + short loop_flag; + float sync ; + float speed ; + short in_connected; + int memsize; +} t_kbuffer; + +t_int *kbuffer_perform(t_int *w); + +void kbuffer_dsp(t_kbuffer *x, t_signal **sp); +void *kbuffer_new(t_symbol *s, int argc, t_atom *argv); +void kbuffer_dsp_free(t_kbuffer *x); +void kbuffer_record(t_kbuffer *x); +void kbuffer_play(t_kbuffer *x); +void kbuffer_loop(t_kbuffer *x); +void kbuffer_info(t_kbuffer *x); +void kbuffer_dump(t_kbuffer *x); +void kbuffer_stop(t_kbuffer *x); +void kbuffer_info(t_kbuffer *x); +void kbuffer_speed(t_kbuffer *x, t_floatarg speed); +void kbuffer_size(t_kbuffer *x, t_floatarg ms); +void kbuffer_ksrate(t_kbuffer *x, t_floatarg ksrate); +void kbuffer_float(t_kbuffer *x, double f); +void kbuffer_int(t_kbuffer *x, int i); +void kbuffer_init(t_kbuffer *x,short initialized); + +void kbuffer_tilde_setup(void){ + kbuffer_class = class_new(gensym("kbuffer~"), (t_newmethod)kbuffer_new, + (t_method)kbuffer_dsp_free,sizeof(t_kbuffer), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(kbuffer_class, t_kbuffer, x_f); + class_addmethod(kbuffer_class,(t_method)kbuffer_dsp,gensym("dsp"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_record,gensym("record"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_play,gensym("play"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_loop,gensym("loop"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_stop,gensym("stop"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_dump,gensym("dump"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_info,gensym("info"),0); + class_addmethod(kbuffer_class,(t_method)kbuffer_speed,gensym("speed"),A_FLOAT,0); + class_addmethod(kbuffer_class,(t_method)kbuffer_size,gensym("size"),A_FLOAT,0); + class_addmethod(kbuffer_class,(t_method)kbuffer_ksrate,gensym("ksrate"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void kbuffer_speed(t_kbuffer *x, t_floatarg speed) { + x->speed = speed; +} + +void kbuffer_size(t_kbuffer *x, t_floatarg ms) { + int i; + if(ms < 1) + ms = 1; + x->duration = ms / 1000.0 ; + x->memsize = x->ksrate * x->duration * sizeof(float); + x->length = x->duration * x->ksrate ; + x->data = (float*) realloc(x->data,x->memsize*sizeof(float)); + for( i = 0; i < x->length; i++){ + x->data[i] = 0.0; + } +} + +void kbuffer_ksrate(t_kbuffer *x, t_floatarg ksrate) { + int i; + if( ksrate < 1 ) + ksrate = 1 ; + x->ksrate = ksrate ; + x->memsize = x->ksrate * x->duration * sizeof(float); + x->length = x->duration * x->ksrate ; + x->si = x->ksrate / x->srate; + x->data = (float*) realloc(x->data,x->memsize*sizeof(float)); + for( i = 0; i < x->length; i++){ + x->data[i] = 0.0; + } +} + +void kbuffer_info(t_kbuffer *x) { + post("function length is %d samples",x->length); + post("function sampling rate is %.2f",x->ksrate); + post("function byte size is %d",x->memsize); + post("function duration is %.2f seconds",x->duration); +} + +void kbuffer_record(t_kbuffer *x) { + x->record_flag = 1; + x->play_flag = 0; + x->dump_flag = 0; + x->loop_flag = 0; + x->sync = 0.0; + x->phase = x->iphase = 0 ; + x->lastphase = -1 ; + // post("starting to record"); +} +void kbuffer_stop(t_kbuffer *x) { + x->record_flag = 0; + x->play_flag = 0; + x->dump_flag = 0; + x->loop_flag = 0; + x->sync = 0.0; + x->phase = x->iphase = 0 ; + x->lastphase = -1 ; +} +void kbuffer_dump(t_kbuffer *x) { + x->record_flag = 0; + x->play_flag = 0; + x->loop_flag = 0; + x->dump_flag = 1; + x->sync = 0.0; + x->phase = x->iphase = 0 ; + x->lastphase = -1 ; +} + +void kbuffer_play(t_kbuffer *x) { + x->record_flag = 0; + x->play_flag = 1; + x->dump_flag = 0; + x->loop_flag = 0; + x->sync = 0.0; + x->phase = x->iphase = 0 ; + x->lastphase = -1 ; +} + +void kbuffer_loop(t_kbuffer *x) { + x->record_flag = 0; + x->play_flag = 0; + x->dump_flag = 0; + x->loop_flag = 1; + x->sync = 0.0; + x->phase = x->iphase = 0 ; + x->lastphase = -1 ; +} + +void kbuffer_dsp_free(t_kbuffer *x) { + free(x->data); +} + +t_int *kbuffer_perform(t_int *w) +{ + // DSP config + t_kbuffer *x = (t_kbuffer *)(w[1]); + t_float *in = (t_float *)(w[2]); + t_float *out = (t_float *)(w[3]); + t_float *sync_out = (t_float *)(w[4]); + int n = (int) w[5]; + short record_flag = x->record_flag; + short play_flag = x->play_flag ; + short dump_flag = x->dump_flag ; + short loop_flag = x->loop_flag ; + int length = x->length; + int iphase = x->iphase; + int lastphase = x->lastphase; + float phase = x->phase; + float *data = x->data; + float si = x->si; + float speed = x->speed; + float sample; + short in_connected = x->in_connected; + float fval = x->fval; + /*********************/ + + while( n-- ){ + if( in_connected ){ + sample = *in++ ; + } else { + sample = fval; + } + if( record_flag ){ + iphase = phase; + /* phase += (si * speed); Bug!! */ + phase += si; + if( iphase >= length ){ + record_flag = 0; + // post("end of recording at %d samples",length); + } + else if( iphase > lastphase ){ + lastphase = iphase ; + data[ iphase ] = sample ; + } + *sync_out++ = phase / (float) length ; + *out++ = sample ; // mirror input to output + } else if ( play_flag ){ + iphase = phase; + phase += (si * speed); + if( iphase >= length ){ + play_flag = 0; + *out++ = data[ length - 1 ]; // lock at final value + } else if (iphase < 0 ) { + play_flag = 0; + *out++ = data[ 0 ]; // lock at first value + } + else { + *out++ = data[ iphase ] ; + } + *sync_out++ = phase / (float) length ; + } + else if ( loop_flag ){ + iphase = phase; + phase += (si * speed); + if( iphase >= length ){ + phase = iphase = 0; + } else if (iphase < 0 ) { + phase = iphase = length - 1; + } + *out++ = data[ iphase ] ; + *sync_out++ = phase / (float) length ; + + } + else if ( dump_flag ) { + iphase = phase ; + phase += 1.0 ; + if( iphase >= length ){ + dump_flag = 0; + } else { + *out++ = data[ iphase ]; + } + + } + + else { + *sync_out++ = 0.0 ; + *out++ = 0.0; + + } + x->phase = phase; + x->lastphase = lastphase; + x->record_flag = record_flag; + x->play_flag = play_flag; + + } + // DSP CONFIG + return (w+6); +} + +void *kbuffer_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_kbuffer *x = (t_kbuffer *)pd_new(kbuffer_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->srate = sys_getsr(); + if( x->srate == 0 ){ + error("zero sampling rate - set to 44100"); + x->srate = 44100; + } + x->ksrate = atom_getfloatarg(0,argc,argv); + x->duration = atom_getfloatarg(1,argc,argv)/1000.0; + if(x->ksrate <= 0) + x->ksrate = 128; + if(x->duration <= 0) + x->duration = 10.; + + kbuffer_init(x,0); + return (x); +} + +void kbuffer_init(t_kbuffer *x,short initialized) +{ + if(!initialized){ + x->record_flag = 0; + x->play_flag = 0; + x->dump_flag = 0; + x->loop_flag = 0; + x->fval = 0; + x->speed = 1.0 ; + x->memsize = x->ksrate * x->duration * sizeof(float); + x->length = x->duration * x->ksrate; + x->data = (float *) calloc(x->memsize, sizeof(float)); + } + x->si = x->ksrate / x->srate; +} + +void kbuffer_dsp(t_kbuffer *x, t_signal **sp) +{ + // DSP CONFIG + + x->in_connected = 1; + + if(x->srate != sp[0]->s_sr){ + x->srate = sp[0]->s_sr; + kbuffer_init(x,1); + } + dsp_add(kbuffer_perform, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + +} + diff --git a/externals/lyonpotpourri/killdc~-help.pd b/externals/lyonpotpourri/killdc~-help.pd new file mode 100755 index 000000000..9edceba4d --- /dev/null +++ b/externals/lyonpotpourri/killdc~-help.pd @@ -0,0 +1,27 @@ +#N canvas 648 97 510 369 10; +#X obj 34 180 killdc~; +#X obj 34 128 +~ 0.5; +#X obj 34 98 *~ 0.5; +#N canvas 0 22 450 300 (subpatch) 0; +#X array sine+dc 441 float 2; +#X coords 0 1 441 -1 200 140 1; +#X restore 295 27 graph; +#X obj 13 260 tabwrite~ sine+dc; +#X msg 88 202 bang; +#N canvas 0 22 450 300 (subpatch) 0; +#X array dc-gone 441 float 2; +#X coords 0 1 441 -1 200 140 1; +#X restore 294 181 graph; +#X obj 140 260 tabwrite~ dc-gone; +#X obj 34 68 osc~ 100; +#X obj 9 7 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 13 40 killdc~ removes DC from signal; +#X text 125 202 <- see DC cut in action; +#X connect 0 0 7 0; +#X connect 1 0 0 0; +#X connect 1 0 4 0; +#X connect 2 0 1 0; +#X connect 5 0 4 0; +#X connect 5 0 7 0; +#X connect 8 0 2 0; diff --git a/externals/lyonpotpourri/killdc~.c b/externals/lyonpotpourri/killdc~.c new file mode 100755 index 000000000..864b7a297 --- /dev/null +++ b/externals/lyonpotpourri/killdc~.c @@ -0,0 +1,119 @@ +#include "MSPd.h" + +#define OBJECT_NAME "killdc~" +#define FUNC_LEN (512) +#define MAXSECTS 20 + +static t_class *killdc_class; + +typedef struct { + float ps[4][MAXSECTS]; + float c[4][MAXSECTS]; + int nsects ; + float xnorm; +} COEFS ; + +typedef struct _killdc +{ + t_object x_obj; + float x_f; + + COEFS fdata; +} t_killdc; + +void *killdc_new(t_symbol *s); +t_int *offset_perform(t_int *w); +t_int *killdc_perform(t_int *w); +void killdc_dsp(t_killdc *x, t_signal **sp); + + + +void killdc_tilde_setup(void) +{ + killdc_class = class_new(gensym("killdc~"),(t_newmethod)killdc_new,0, + sizeof(t_killdc), 0, A_DEFSYMBOL,0); + CLASS_MAINSIGNALIN(killdc_class,t_killdc, x_f ); + class_addmethod(killdc_class,(t_method)killdc_dsp,gensym("dsp"),A_CANT,0); + potpourri_announce(OBJECT_NAME); + +} + +void *killdc_new(t_symbol *s) +{ + int i, j; + + t_killdc *x = (t_killdc *)pd_new(killdc_class); + outlet_new(&x->x_obj, gensym("signal")); + + /**************/ + + + x->fdata.nsects = 3; + x->fdata.c[0][0] = -1.9999995 ; + x->fdata.c[1][0] = -1.9997407 ; + x->fdata.c[2][0] = 1.0000000 ; + x->fdata.c[3][0] = 0.99974253 ; + x->fdata.c[0][1] = -1.9999997 ; + x->fdata.c[1][1] = -1.9988353 ; + x->fdata.c[2][1] = 1.0000000 ; + x->fdata.c[3][1] = 0.99883796 ; + x->fdata.c[0][2] = -2.0000000 ; + x->fdata.c[1][2] = -1.9959218 ; + x->fdata.c[2][2] = 1.0000000 ; + x->fdata.c[3][2] = 0.99592773 ; + + for(i=0; i< x->fdata.nsects; i++) { + for(j=0;j<4;j++) { + x->fdata.ps[j][i] = 0.0; + } + } + + x->fdata.xnorm = 0.99725327e+00 ; + + + + + // INITIALIZATIONS + + + return (x); +} +// method from Paul Lansky's cmix implementation +t_int *killdc_perform(t_int *w) +{ + t_float *in1,*out; + float sample ; + int n; + int m; + float op; + // int lcount = 0; + /********/ + t_killdc *x = (t_killdc *) (w[1]); + in1 = (t_float *)(w[2]); + out = (t_float *)(w[3]); + n = (int)(w[4]); + + while (n--) { + sample = *in1++; + for(m=0; m< x->fdata.nsects;m++) { + op = sample + x->fdata.c[0][m] * x->fdata.ps[0][m] + + x->fdata.c[2][m] * x->fdata.ps[1][m] + - x->fdata.c[1][m] * x->fdata.ps[2][m] + - x->fdata.c[3][m] * x->fdata.ps[3][m]; + + x->fdata.ps[1][m] = x->fdata.ps[0][m]; + x->fdata.ps[0][m] = sample; + x->fdata.ps[3][m] = x->fdata.ps[2][m]; + x->fdata.ps[2][m] = op; + sample = op; + } + *out++ = sample * x->fdata.xnorm ; + } + return (w+5); +} + +void killdc_dsp(t_killdc *x, t_signal **sp) +{ + dsp_add(killdc_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/latch~-help.pd b/externals/lyonpotpourri/latch~-help.pd new file mode 100755 index 000000000..230eae76c --- /dev/null +++ b/externals/lyonpotpourri/latch~-help.pd @@ -0,0 +1,28 @@ +#N canvas 890 538 471 305 10; +#X obj 112 155 latch~ 250; +#X obj 112 106 samm~ 60 1; +#X obj 23 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 30 207 *~; +#X obj 30 149 osc~ 500; +#X obj 30 268 dac~; +#X obj 117 217 hsl 70 12 0 0.1 0 0 latch-gain latch-gain-in gain -2 +-8 0 10 -262130 -1 -1 0 1; +#X floatatom 68 218 5 0 0 0 - latch-gain -, f 5; +#X obj 203 82 osc~ 0.1; +#X obj 203 105 *~ 400; +#X obj 203 133 +~ 450; +#X text 24 42 latch~ - a sample-accurate latch generator. An incoming +click is held for a given amount of time.; +#X text 193 158 arg: latch duration in ms.; +#X obj 30 236 *~ 0; +#X connect 0 0 3 1; +#X connect 1 0 0 0; +#X connect 3 0 13 0; +#X connect 4 0 3 0; +#X connect 7 0 13 1; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 0 1; +#X connect 13 0 5 0; +#X connect 13 0 5 1; diff --git a/externals/lyonpotpourri/latch~.c b/externals/lyonpotpourri/latch~.c new file mode 100755 index 000000000..b67c27b29 --- /dev/null +++ b/externals/lyonpotpourri/latch~.c @@ -0,0 +1,111 @@ +#include "MSPd.h" + +static t_class *latch_class; + +#define OBJECT_NAME "latch~" +#define LATCH_WAITING 0 +#define LATCH_RUNNING 1 + +typedef struct _latch +{ + t_object x_obj; + t_float x_f; + t_float current; + long latch; + long dsamps; + long sr; + t_float duration; + long status; + long connected; +} t_latch; + +static void *latch_new(t_float duration); +static t_int *latch_perform(t_int *w); +static void latch_dsp(t_latch *x, t_signal **sp); + +void latch_tilde_setup(void) +{ + latch_class = class_new(gensym("latch~"), (t_newmethod)latch_new, 0, sizeof(t_latch), 0,A_FLOAT, 0); + CLASS_MAINSIGNALIN(latch_class, t_latch, x_f); + class_addmethod(latch_class, (t_method)latch_dsp, gensym("dsp"), A_CANT, 0); + potpourri_announce(OBJECT_NAME); +} + +static void *latch_new(t_float duration) +{ + + t_latch *x = (t_latch *)pd_new(latch_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->status = LATCH_WAITING; + x->duration = duration; + x->sr = sys_getsr(); + if(x->duration <= 1.0) + x->duration = 1.0; + x->duration *= 0.001; + x->dsamps = x->sr ? x->sr * x->duration : 44100; + + return x; +} + +static t_int *latch_perform(t_int *w) +{ + t_latch *x = (t_latch *) (w[1]); + t_float *trigger = (t_float *)(w[2]); + t_float *vec_duration = (t_float *)(w[3]); + t_float *output = (t_float *)(w[4]); + int n = (int) w[5]; + int next_pointer = 6; + long latch = x->latch; + long dsamps = x->dsamps; + long status = x->status; + t_float current = x->current; + t_float duration = x->duration; + long sr = x->sr; + long connected = x->connected; + int i = 0; + + + + for(i = 0; i < n; i++){ + + if(connected){ + duration = vec_duration[i]; + if( duration > 0.0 ){ // dummy proof + dsamps = sr * duration * 0.001; + } + } + + if(trigger[i]){ + latch = 0; + status = LATCH_RUNNING; + current = trigger[i]; + } else { + latch++; + if(latch >= dsamps){ + status = LATCH_WAITING; + current = 0.0; + } + } + output[i] = current; + + } + + + x->current = current; + x->status = status; + x->latch = latch; + x->dsamps = dsamps; + return w + next_pointer; +} + +static void latch_dsp(t_latch *x, t_signal **sp) +{ + x->connected = 1; + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + x->dsamps = x->duration * x->sr; + } + dsp_add(latch_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/leanconvert.c b/externals/lyonpotpourri/leanconvert.c new file mode 100755 index 000000000..617c66568 --- /dev/null +++ b/externals/lyonpotpourri/leanconvert.c @@ -0,0 +1 @@ +#include "fftease.h" void leanconvert( float *S, float *C, int N2 ) { int real, imag, amp, phase; float a, b; int i; double hypot(), atan2(); for ( i = 0; i <= N2; i++ ) { imag = phase = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); C[phase] = -atan2( b, a ); } } \ No newline at end of file diff --git a/externals/lyonpotpourri/leanunconvert.c b/externals/lyonpotpourri/leanunconvert.c new file mode 100755 index 000000000..48807294e --- /dev/null +++ b/externals/lyonpotpourri/leanunconvert.c @@ -0,0 +1 @@ +#include "fftease.h" /* unconvert essentially undoes what convert does, i.e., it turns N2+1 PAIRS of amplitude and frequency values in C into N2 PAIR of complex spectrum data (in rfft format) in output array S; sampling rate R and interpolation factor I are used to recompute phase values from frequencies */ void leanunconvert( float *C, float *S, int N2 ) { double cos(), sin(); int real, imag, amp, phase; register int i; for ( i = 0; i <= N2; i++ ) { imag = phase = ( real = amp = i<<1 ) + 1; S[real] = *(C+amp) * cos( *(C+phase) ); if ( i != N2 ) S[imag] = -*(C+amp) * sin( *(C+phase) ); } } \ No newline at end of file diff --git a/externals/lyonpotpourri/lpp.h b/externals/lyonpotpourri/lpp.h new file mode 100755 index 000000000..d9521ac01 --- /dev/null +++ b/externals/lyonpotpourri/lpp.h @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <time.h> + +#define LYONPOTPOURRI_MSG "-[LyonPotpourri 3.0]-" +#define LYONPOTPOURRI_VERSION "3.0 (pre-release 3.1)" +#define LPP_COMPILE_DATE "12 May 2010" +#define lpp_version(objectname) post("%s: version %s compiled %s",objectname,LYONPOTPOURRI_VERSION,LPP_COMPILE_DATE); +// #define potpourri_announce(objname) post("%s\t ( %s )",LYONPOTPOURRI_MSG,objname) + +#define NO_FREE_FUNCTION 0 + +#ifndef PI +#define PI 3.1415926535898 +#endif +#ifndef PIOVERTWO +#define PIOVERTWO 1.5707963268 +#endif +#ifndef TWOPI +#define TWOPI 6.2831853072 +#endif +// budget version of Max/MSP denorm function +#define FIX_DENORM_FLOAT(v) (v=(fabs(v) < 0.000001 ? 0.f : (v))) + + +/*** MSP helper functions, thanks JKC! ***/ + +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); + +void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av) +{ + if (c&&ac&&av&&(idx<ac)) { + *c = atom_getfloat(av+idx); + } +} + +void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av) +{ + if (c&&ac&&av&&(idx<ac)) { + *c = atom_getsymbol(av+idx); + } +} diff --git a/externals/lyonpotpourri/lyonpotpourri-meta.pd b/externals/lyonpotpourri/lyonpotpourri-meta.pd new file mode 100755 index 000000000..55430cf84 --- /dev/null +++ b/externals/lyonpotpourri/lyonpotpourri-meta.pd @@ -0,0 +1,7 @@ +#N canvas 15 49 200 200 10; +#N canvas 25 49 420 300 META 1; +#X text 13 41 NAME lyonpotpourri; +#X text 10 25 AUTHOR Eric Lyon <e.lyon@qub.ac.uk>; +#X text 10 10 VERSION 2.0; +#X text 10 60 LICENSE MIT; +#X restore 10 10 pd META; diff --git a/externals/lyonpotpourri/m_pd.h b/externals/lyonpotpourri/m_pd.h new file mode 100755 index 000000000..02030a779 --- /dev/null +++ b/externals/lyonpotpourri/m_pd.h @@ -0,0 +1,735 @@ +/* Copyright (c) 1997-1999 Miller Puckette. +* For information on usage and redistribution, and for a DISCLAIMER OF ALL +* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ + + +#ifndef __m_pd_h_ + +#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) +extern "C" { +#endif + +#define PD_MAJOR_VERSION 0 +#define PD_MINOR_VERSION 45 +#define PD_BUGFIX_VERSION 4 +#define PD_TEST_VERSION "" +extern int pd_compatibilitylevel; /* e.g., 43 for pd 0.43 compatibility */ + +/* old name for "MSW" flag -- we have to take it for the sake of many old +"nmakefiles" for externs, which will define NT and not MSW */ +#if defined(NT) && !defined(MSW) +#define MSW +#endif + +/* These pragmas are only used for MSVC, not MinGW or Cygwin <hans@at.or.at> */ +#ifdef _MSC_VER +/* #pragma warning( disable : 4091 ) */ +#pragma warning( disable : 4305 ) /* uncast const double to float */ +#pragma warning( disable : 4244 ) /* uncast float/int conversion etc. */ +#pragma warning( disable : 4101 ) /* unused automatic variables */ +#endif /* _MSC_VER */ + + /* the external storage class is "extern" in UNIX; in MSW it's ugly. */ +#ifdef _WIN32 +#ifdef PD_INTERNAL +#define EXTERN __declspec(dllexport) extern +#else +#define EXTERN __declspec(dllimport) extern +#endif /* PD_INTERNAL */ +#else +#define EXTERN extern +#endif /* _WIN32 */ + + /* and depending on the compiler, hidden data structures are + declared differently: */ +#if defined( __GNUC__) || defined( __BORLANDC__ ) || defined( __MWERKS__ ) +#define EXTERN_STRUCT struct +#else +#define EXTERN_STRUCT extern struct +#endif + +/* Define some attributes, specific to the compiler */ +#if defined(__GNUC__) +#define ATTRIBUTE_FORMAT_PRINTF(a, b) __attribute__ ((format (printf, a, b))) +#else +#define ATTRIBUTE_FORMAT_PRINTF(a, b) +#endif + +#if !defined(_SIZE_T) && !defined(_SIZE_T_) +#include <stddef.h> /* just for size_t -- how lame! */ +#endif + +/* Microsoft Visual Studio is not C99, it does not provide stdint.h */ +#ifdef _MSC_VER +typedef signed __int8 int8_t; +typedef signed __int16 int16_t; +typedef signed __int32 int32_t; +typedef signed __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#else +# include <stdint.h> +#endif + +/* for FILE, needed by sys_fopen() and sys_fclose() only */ +#include <stdio.h> + +#define MAXPDSTRING 1000 /* use this for anything you want */ +#define MAXPDARG 5 /* max number of args we can typecheck today */ + +/* signed and unsigned integer types the size of a pointer: */ +#if !defined(PD_LONGINTTYPE) +#define PD_LONGINTTYPE long +#endif + +#if !defined(PD_FLOATSIZE) + /* normally, our floats (t_float, t_sample,...) are 32bit */ +# define PD_FLOATSIZE 32 +#endif + +#if PD_FLOATSIZE == 32 +# define PD_FLOATTYPE float +/* an unsigned int of the same size as FLOATTYPE: */ +# define PD_FLOATUINTTYPE unsigned int + +#elif PD_FLOATSIZE == 64 +# define PD_FLOATTYPE double +# define PD_FLOATUINTTYPE unsigned long +#else +# error invalid FLOATSIZE: must be 32 or 64 +#endif + +typedef PD_LONGINTTYPE t_int; /* pointer-size integer */ +typedef PD_FLOATTYPE t_float; /* a float type at most the same size */ +typedef PD_FLOATTYPE t_floatarg; /* float type for function calls */ + +typedef struct _symbol +{ + char *s_name; + struct _class **s_thing; + struct _symbol *s_next; +} t_symbol; + +EXTERN_STRUCT _array; +#define t_array struct _array /* g_canvas.h */ + +/* pointers to glist and array elements go through a "stub" which sticks +around after the glist or array is freed. The stub itself is deleted when +both the glist/array is gone and the refcount is zero, ensuring that no +gpointers are pointing here. */ + +#define GP_NONE 0 /* the stub points nowhere (has been cut off) */ +#define GP_GLIST 1 /* the stub points to a glist element */ +#define GP_ARRAY 2 /* ... or array */ + +typedef struct _gstub +{ + union + { + struct _glist *gs_glist; /* glist we're in */ + struct _array *gs_array; /* array we're in */ + } gs_un; + int gs_which; /* GP_GLIST/GP_ARRAY */ + int gs_refcount; /* number of gpointers pointing here */ +} t_gstub; + +typedef struct _gpointer /* pointer to a gobj in a glist */ +{ + union + { + struct _scalar *gp_scalar; /* scalar we're in (if glist) */ + union word *gp_w; /* raw data (if array) */ + } gp_un; + int gp_valid; /* number which must match gpointee */ + t_gstub *gp_stub; /* stub which points to glist/array */ +} t_gpointer; + +typedef union word +{ + t_float w_float; + t_symbol *w_symbol; + t_gpointer *w_gpointer; + t_array *w_array; + struct _binbuf *w_binbuf; + int w_index; +} t_word; + +typedef enum +{ + A_NULL, + A_FLOAT, + A_SYMBOL, + A_POINTER, + A_SEMI, + A_COMMA, + A_DEFFLOAT, + A_DEFSYM, + A_DOLLAR, + A_DOLLSYM, + A_GIMME, + A_CANT +} t_atomtype; + +#define A_DEFSYMBOL A_DEFSYM /* better name for this */ + +typedef struct _atom +{ + t_atomtype a_type; + union word a_w; +} t_atom; + +EXTERN_STRUCT _class; +#define t_class struct _class + +EXTERN_STRUCT _outlet; +#define t_outlet struct _outlet + +EXTERN_STRUCT _inlet; +#define t_inlet struct _inlet + +EXTERN_STRUCT _binbuf; +#define t_binbuf struct _binbuf + +EXTERN_STRUCT _clock; +#define t_clock struct _clock + +EXTERN_STRUCT _outconnect; +#define t_outconnect struct _outconnect + +EXTERN_STRUCT _glist; +#define t_glist struct _glist +#define t_canvas struct _glist /* LATER lose this */ + +typedef t_class *t_pd; /* pure datum: nothing but a class pointer */ + +typedef struct _gobj /* a graphical object */ +{ + t_pd g_pd; /* pure datum header (class) */ + struct _gobj *g_next; /* next in list */ +} t_gobj; + +typedef struct _scalar /* a graphical object holding data */ +{ + t_gobj sc_gobj; /* header for graphical object */ + t_symbol *sc_template; /* template name (LATER replace with pointer) */ + t_word sc_vec[1]; /* indeterminate-length array of words */ +} t_scalar; + +typedef struct _text /* patchable object - graphical, with text */ +{ + t_gobj te_g; /* header for graphical object */ + t_binbuf *te_binbuf; /* holder for the text */ + t_outlet *te_outlet; /* linked list of outlets */ + t_inlet *te_inlet; /* linked list of inlets */ + short te_xpix; /* x&y location (within the toplevel) */ + short te_ypix; + short te_width; /* requested width in chars, 0 if auto */ + unsigned int te_type:2; /* from defs below */ +} t_text; + +#define T_TEXT 0 /* just a textual comment */ +#define T_OBJECT 1 /* a MAX style patchable object */ +#define T_MESSAGE 2 /* a MAX stype message */ +#define T_ATOM 3 /* a cell to display a number or symbol */ + +#define te_pd te_g.g_pd + + /* t_object is synonym for t_text (LATER unify them) */ + +typedef struct _text t_object; + +#define ob_outlet te_outlet +#define ob_inlet te_inlet +#define ob_binbuf te_binbuf +#define ob_pd te_g.g_pd +#define ob_g te_g + +typedef void (*t_method)(void); +typedef void *(*t_newmethod)( void); +typedef void (*t_gotfn)(void *x, ...); + +/* ---------------- pre-defined objects and symbols --------------*/ +EXTERN t_pd pd_objectmaker; /* factory for creating "object" boxes */ +EXTERN t_pd pd_canvasmaker; /* factory for creating canvases */ +EXTERN t_symbol s_pointer; +EXTERN t_symbol s_float; +EXTERN t_symbol s_symbol; +EXTERN t_symbol s_bang; +EXTERN t_symbol s_list; +EXTERN t_symbol s_anything; +EXTERN t_symbol s_signal; +EXTERN t_symbol s__N; +EXTERN t_symbol s__X; +EXTERN t_symbol s_x; +EXTERN t_symbol s_y; +EXTERN t_symbol s_; + +/* --------- prototypes from the central message system ----------- */ +EXTERN void pd_typedmess(t_pd *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void pd_forwardmess(t_pd *x, int argc, t_atom *argv); +EXTERN t_symbol *gensym(const char *s); +EXTERN t_gotfn getfn(t_pd *x, t_symbol *s); +EXTERN t_gotfn zgetfn(t_pd *x, t_symbol *s); +EXTERN void nullfn(void); +EXTERN void pd_vmess(t_pd *x, t_symbol *s, char *fmt, ...); +#define mess0(x, s) ((*getfn((x), (s)))((x))) +#define mess1(x, s, a) ((*getfn((x), (s)))((x), (a))) +#define mess2(x, s, a,b) ((*getfn((x), (s)))((x), (a),(b))) +#define mess3(x, s, a,b,c) ((*getfn((x), (s)))((x), (a),(b),(c))) +#define mess4(x, s, a,b,c,d) ((*getfn((x), (s)))((x), (a),(b),(c),(d))) +#define mess5(x, s, a,b,c,d,e) ((*getfn((x), (s)))((x), (a),(b),(c),(d),(e))) +EXTERN void obj_list(t_object *x, t_symbol *s, int argc, t_atom *argv); +EXTERN t_pd *pd_newest(void); + +/* --------------- memory management -------------------- */ +EXTERN void *getbytes(size_t nbytes); +EXTERN void *getzbytes(size_t nbytes); +EXTERN void *copybytes(void *src, size_t nbytes); +EXTERN void freebytes(void *x, size_t nbytes); +EXTERN void *resizebytes(void *x, size_t oldsize, size_t newsize); + +/* -------------------- atoms ----------------------------- */ + +#define SETSEMI(atom) ((atom)->a_type = A_SEMI, (atom)->a_w.w_index = 0) +#define SETCOMMA(atom) ((atom)->a_type = A_COMMA, (atom)->a_w.w_index = 0) +#define SETPOINTER(atom, gp) ((atom)->a_type = A_POINTER, \ + (atom)->a_w.w_gpointer = (gp)) +#define SETFLOAT(atom, f) ((atom)->a_type = A_FLOAT, (atom)->a_w.w_float = (f)) +#define SETSYMBOL(atom, s) ((atom)->a_type = A_SYMBOL, \ + (atom)->a_w.w_symbol = (s)) +#define SETDOLLAR(atom, n) ((atom)->a_type = A_DOLLAR, \ + (atom)->a_w.w_index = (n)) +#define SETDOLLSYM(atom, s) ((atom)->a_type = A_DOLLSYM, \ + (atom)->a_w.w_symbol= (s)) + +EXTERN t_float atom_getfloat(t_atom *a); +EXTERN t_int atom_getint(t_atom *a); +EXTERN t_symbol *atom_getsymbol(t_atom *a); +EXTERN t_symbol *atom_gensym(t_atom *a); +EXTERN t_float atom_getfloatarg(int which, int argc, t_atom *argv); +EXTERN t_int atom_getintarg(int which, int argc, t_atom *argv); +EXTERN t_symbol *atom_getsymbolarg(int which, int argc, t_atom *argv); + +EXTERN void atom_string(t_atom *a, char *buf, unsigned int bufsize); + +/* ------------------ binbufs --------------- */ + +EXTERN t_binbuf *binbuf_new(void); +EXTERN void binbuf_free(t_binbuf *x); +EXTERN t_binbuf *binbuf_duplicate(t_binbuf *y); + +EXTERN void binbuf_text(t_binbuf *x, char *text, size_t size); +EXTERN void binbuf_gettext(t_binbuf *x, char **bufp, int *lengthp); +EXTERN void binbuf_clear(t_binbuf *x); +EXTERN void binbuf_add(t_binbuf *x, int argc, t_atom *argv); +EXTERN void binbuf_addv(t_binbuf *x, char *fmt, ...); +EXTERN void binbuf_addbinbuf(t_binbuf *x, t_binbuf *y); +EXTERN void binbuf_addsemi(t_binbuf *x); +EXTERN void binbuf_restore(t_binbuf *x, int argc, t_atom *argv); +EXTERN void binbuf_print(t_binbuf *x); +EXTERN int binbuf_getnatom(t_binbuf *x); +EXTERN t_atom *binbuf_getvec(t_binbuf *x); +EXTERN int binbuf_resize(t_binbuf *x, int newsize); +EXTERN void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv); +EXTERN int binbuf_read(t_binbuf *b, char *filename, char *dirname, + int crflag); +EXTERN int binbuf_read_via_canvas(t_binbuf *b, char *filename, t_canvas *canvas, + int crflag); +EXTERN int binbuf_read_via_path(t_binbuf *b, char *filename, char *dirname, + int crflag); +EXTERN int binbuf_write(t_binbuf *x, char *filename, char *dir, + int crflag); +EXTERN void binbuf_evalfile(t_symbol *name, t_symbol *dir); +EXTERN t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, + int tonew); + +/* ------------------ clocks --------------- */ + +EXTERN t_clock *clock_new(void *owner, t_method fn); +EXTERN void clock_set(t_clock *x, double systime); +EXTERN void clock_delay(t_clock *x, double delaytime); +EXTERN void clock_unset(t_clock *x); +EXTERN void clock_setunit(t_clock *x, double timeunit, int sampflag); +EXTERN double clock_getlogicaltime(void); +EXTERN double clock_getsystime(void); /* OBSOLETE; use clock_getlogicaltime() */ +EXTERN double clock_gettimesince(double prevsystime); +EXTERN double clock_gettimesincewithunits(double prevsystime, + double units, int sampflag); +EXTERN double clock_getsystimeafter(double delaytime); +EXTERN void clock_free(t_clock *x); + +/* ----------------- pure data ---------------- */ +EXTERN t_pd *pd_new(t_class *cls); +EXTERN void pd_free(t_pd *x); +EXTERN void pd_bind(t_pd *x, t_symbol *s); +EXTERN void pd_unbind(t_pd *x, t_symbol *s); +EXTERN t_pd *pd_findbyclass(t_symbol *s, t_class *c); +EXTERN void pd_pushsym(t_pd *x); +EXTERN void pd_popsym(t_pd *x); +EXTERN t_symbol *pd_getfilename(void); +EXTERN t_symbol *pd_getdirname(void); +EXTERN void pd_bang(t_pd *x); +EXTERN void pd_pointer(t_pd *x, t_gpointer *gp); +EXTERN void pd_float(t_pd *x, t_float f); +EXTERN void pd_symbol(t_pd *x, t_symbol *s); +EXTERN void pd_list(t_pd *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void pd_anything(t_pd *x, t_symbol *s, int argc, t_atom *argv); +#define pd_class(x) (*(x)) + +/* ----------------- pointers ---------------- */ +EXTERN void gpointer_init(t_gpointer *gp); +EXTERN void gpointer_copy(const t_gpointer *gpfrom, t_gpointer *gpto); +EXTERN void gpointer_unset(t_gpointer *gp); +EXTERN int gpointer_check(const t_gpointer *gp, int headok); + +/* ----------------- patchable "objects" -------------- */ +EXTERN t_inlet *inlet_new(t_object *owner, t_pd *dest, t_symbol *s1, + t_symbol *s2); +EXTERN t_inlet *pointerinlet_new(t_object *owner, t_gpointer *gp); +EXTERN t_inlet *floatinlet_new(t_object *owner, t_float *fp); +EXTERN t_inlet *symbolinlet_new(t_object *owner, t_symbol **sp); +EXTERN t_inlet *signalinlet_new(t_object *owner, t_float f); +EXTERN void inlet_free(t_inlet *x); + +EXTERN t_outlet *outlet_new(t_object *owner, t_symbol *s); +EXTERN void outlet_bang(t_outlet *x); +EXTERN void outlet_pointer(t_outlet *x, t_gpointer *gp); +EXTERN void outlet_float(t_outlet *x, t_float f); +EXTERN void outlet_symbol(t_outlet *x, t_symbol *s); +EXTERN void outlet_list(t_outlet *x, t_symbol *s, int argc, t_atom *argv); +EXTERN void outlet_anything(t_outlet *x, t_symbol *s, int argc, t_atom *argv); +EXTERN t_symbol *outlet_getsymbol(t_outlet *x); +EXTERN void outlet_free(t_outlet *x); +EXTERN t_object *pd_checkobject(t_pd *x); + + +/* -------------------- canvases -------------- */ + +EXTERN void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir); + +EXTERN void canvas_setargs(int argc, t_atom *argv); +EXTERN void canvas_getargs(int *argcp, t_atom **argvp); +EXTERN t_symbol *canvas_getcurrentdir(void); +EXTERN t_glist *canvas_getcurrent(void); +EXTERN void canvas_makefilename(t_glist *c, char *file, + char *result,int resultsize); +EXTERN t_symbol *canvas_getdir(t_glist *x); +EXTERN char sys_font[]; /* default typeface set in s_main.c */ +EXTERN char sys_fontweight[]; /* default font weight set in s_main.c */ +EXTERN int sys_fontwidth(int fontsize); +EXTERN int sys_fontheight(int fontsize); +EXTERN void canvas_dataproperties(t_glist *x, t_scalar *sc, t_binbuf *b); +EXTERN int canvas_open(t_canvas *x, const char *name, const char *ext, + char *dirresult, char **nameresult, unsigned int size, int bin); + +/* ---------------- widget behaviors ---------------------- */ + +EXTERN_STRUCT _widgetbehavior; +#define t_widgetbehavior struct _widgetbehavior + +EXTERN_STRUCT _parentwidgetbehavior; +#define t_parentwidgetbehavior struct _parentwidgetbehavior +EXTERN t_parentwidgetbehavior *pd_getparentwidget(t_pd *x); + +/* -------------------- classes -------------- */ + +#define CLASS_DEFAULT 0 /* flags for new classes below */ +#define CLASS_PD 1 +#define CLASS_GOBJ 2 +#define CLASS_PATCHABLE 3 +#define CLASS_NOINLET 8 + +#define CLASS_TYPEMASK 3 + + +EXTERN t_class *class_new(t_symbol *name, t_newmethod newmethod, + t_method freemethod, size_t size, int flags, t_atomtype arg1, ...); +EXTERN void class_addcreator(t_newmethod newmethod, t_symbol *s, + t_atomtype type1, ...); +EXTERN void class_addmethod(t_class *c, t_method fn, t_symbol *sel, + t_atomtype arg1, ...); +EXTERN void class_addbang(t_class *c, t_method fn); +EXTERN void class_addpointer(t_class *c, t_method fn); +EXTERN void class_doaddfloat(t_class *c, t_method fn); +EXTERN void class_addsymbol(t_class *c, t_method fn); +EXTERN void class_addlist(t_class *c, t_method fn); +EXTERN void class_addanything(t_class *c, t_method fn); +EXTERN void class_sethelpsymbol(t_class *c, t_symbol *s); +EXTERN void class_setwidget(t_class *c, t_widgetbehavior *w); +EXTERN void class_setparentwidget(t_class *c, t_parentwidgetbehavior *w); +EXTERN t_parentwidgetbehavior *class_parentwidget(t_class *c); +EXTERN char *class_getname(t_class *c); +EXTERN char *class_gethelpname(t_class *c); +EXTERN char *class_gethelpdir(t_class *c); +EXTERN void class_setdrawcommand(t_class *c); +EXTERN int class_isdrawcommand(t_class *c); +EXTERN void class_domainsignalin(t_class *c, int onset); +EXTERN void class_set_extern_dir(t_symbol *s); +#define CLASS_MAINSIGNALIN(c, type, field) \ + class_domainsignalin(c, (char *)(&((type *)0)->field) - (char *)0) + + /* prototype for functions to save Pd's to a binbuf */ +typedef void (*t_savefn)(t_gobj *x, t_binbuf *b); +EXTERN void class_setsavefn(t_class *c, t_savefn f); +EXTERN t_savefn class_getsavefn(t_class *c); +EXTERN void obj_saveformat(t_object *x, t_binbuf *bb); /* add format to bb */ + + /* prototype for functions to open properties dialogs */ +typedef void (*t_propertiesfn)(t_gobj *x, struct _glist *glist); +EXTERN void class_setpropertiesfn(t_class *c, t_propertiesfn f); +EXTERN t_propertiesfn class_getpropertiesfn(t_class *c); + +#ifndef PD_CLASS_DEF +#define class_addbang(x, y) class_addbang((x), (t_method)(y)) +#define class_addpointer(x, y) class_addpointer((x), (t_method)(y)) +#define class_addfloat(x, y) class_doaddfloat((x), (t_method)(y)) +#define class_addsymbol(x, y) class_addsymbol((x), (t_method)(y)) +#define class_addlist(x, y) class_addlist((x), (t_method)(y)) +#define class_addanything(x, y) class_addanything((x), (t_method)(y)) +#endif + +/* ------------ printing --------------------------------- */ +EXTERN void post(const char *fmt, ...); +EXTERN void startpost(const char *fmt, ...); +EXTERN void poststring(const char *s); +EXTERN void postfloat(t_floatarg f); +EXTERN void postatom(int argc, t_atom *argv); +EXTERN void endpost(void); +EXTERN void error(const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(1, 2); +EXTERN void verbose(int level, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3); +EXTERN void bug(const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(1, 2); +EXTERN void pd_error(void *object, const char *fmt, ...) ATTRIBUTE_FORMAT_PRINTF(2, 3); +EXTERN void logpost(const void *object, const int level, const char *fmt, ...) + ATTRIBUTE_FORMAT_PRINTF(3, 4); +EXTERN void sys_logerror(const char *object, const char *s); +EXTERN void sys_unixerror(const char *object); +EXTERN void sys_ouch(void); + + +/* ------------ system interface routines ------------------- */ +EXTERN int sys_isreadablefile(const char *name); +EXTERN int sys_isabsolutepath(const char *dir); +EXTERN void sys_bashfilename(const char *from, char *to); +EXTERN void sys_unbashfilename(const char *from, char *to); +EXTERN int open_via_path(const char *dir, const char *name, const char *ext, + char *dirresult, char **nameresult, unsigned int size, int bin); +EXTERN int sched_geteventno(void); +EXTERN double sys_getrealtime(void); +EXTERN int (*sys_idlehook)(void); /* hook to add idle time computation */ + +/* Win32's open()/fopen() do not handle UTF-8 filenames so we need + * these internal versions that handle UTF-8 filenames the same across + * all platforms. They are recommended for use in external + * objectclasses as well so they work with Unicode filenames on Windows */ +EXTERN int sys_open(const char *path, int oflag, ...); +EXTERN int sys_close(int fd); +EXTERN FILE *sys_fopen(const char *filename, const char *mode); +EXTERN int sys_fclose(FILE *stream); + +/* ------------ threading ------------------- */ +EXTERN void sys_lock(void); +EXTERN void sys_unlock(void); +EXTERN int sys_trylock(void); + + +/* --------------- signals ----------------------------------- */ + +typedef PD_FLOATTYPE t_sample; +typedef union _sampleint_union { + t_sample f; + PD_FLOATUINTTYPE i; +} t_sampleint_union; +#define MAXLOGSIG 32 +#define MAXSIGSIZE (1 << MAXLOGSIG) + +typedef struct _signal +{ + int s_n; /* number of points in the array */ + t_sample *s_vec; /* the array */ + t_float s_sr; /* sample rate */ + int s_refcount; /* number of times used */ + int s_isborrowed; /* whether we're going to borrow our array */ + struct _signal *s_borrowedfrom; /* signal to borrow it from */ + struct _signal *s_nextfree; /* next in freelist */ + struct _signal *s_nextused; /* next in used list */ + int s_vecsize; /* allocated size of array in points */ +} t_signal; + +typedef t_int *(*t_perfroutine)(t_int *args); + +EXTERN t_int *plus_perform(t_int *args); +EXTERN t_int *zero_perform(t_int *args); +EXTERN t_int *copy_perform(t_int *args); + +EXTERN void dsp_add_plus(t_sample *in1, t_sample *in2, t_sample *out, int n); +EXTERN void dsp_add_copy(t_sample *in, t_sample *out, int n); +EXTERN void dsp_add_scalarcopy(t_float *in, t_sample *out, int n); +EXTERN void dsp_add_zero(t_sample *out, int n); + +EXTERN int sys_getblksize(void); +EXTERN t_float sys_getsr(void); +EXTERN int sys_get_inchannels(void); +EXTERN int sys_get_outchannels(void); + +EXTERN void dsp_add(t_perfroutine f, int n, ...); +EXTERN void dsp_addv(t_perfroutine f, int n, t_int *vec); +EXTERN void pd_fft(t_float *buf, int npoints, int inverse); +EXTERN int ilog2(int n); + +EXTERN void mayer_fht(t_sample *fz, int n); +EXTERN void mayer_fft(int n, t_sample *real, t_sample *imag); +EXTERN void mayer_ifft(int n, t_sample *real, t_sample *imag); +EXTERN void mayer_realfft(int n, t_sample *real); +EXTERN void mayer_realifft(int n, t_sample *real); + +EXTERN float *cos_table; +#define LOGCOSTABSIZE 9 +#define COSTABSIZE (1<<LOGCOSTABSIZE) + +EXTERN int canvas_suspend_dsp(void); +EXTERN void canvas_resume_dsp(int oldstate); +EXTERN void canvas_update_dsp(void); +EXTERN int canvas_dspstate; + +/* up/downsampling */ +typedef struct _resample +{ + int method; /* up/downsampling method ID */ + + t_int downsample; /* downsampling factor */ + t_int upsample; /* upsampling factor */ + + t_sample *s_vec; /* here we hold the resampled data */ + int s_n; + + t_sample *coeffs; /* coefficients for filtering... */ + int coefsize; + + t_sample *buffer; /* buffer for filtering */ + int bufsize; +} t_resample; + +EXTERN void resample_init(t_resample *x); +EXTERN void resample_free(t_resample *x); + +EXTERN void resample_dsp(t_resample *x, t_sample *in, int insize, t_sample *out, int outsize, int method); +EXTERN void resamplefrom_dsp(t_resample *x, t_sample *in, int insize, int outsize, int method); +EXTERN void resampleto_dsp(t_resample *x, t_sample *out, int insize, int outsize, int method); + +/* ----------------------- utility functions for signals -------------- */ +EXTERN t_float mtof(t_float); +EXTERN t_float ftom(t_float); +EXTERN t_float rmstodb(t_float); +EXTERN t_float powtodb(t_float); +EXTERN t_float dbtorms(t_float); +EXTERN t_float dbtopow(t_float); + +EXTERN t_float q8_sqrt(t_float); +EXTERN t_float q8_rsqrt(t_float); +#ifndef N32 +EXTERN t_float qsqrt(t_float); /* old names kept for extern compatibility */ +EXTERN t_float qrsqrt(t_float); +#endif +/* --------------------- data --------------------------------- */ + + /* graphical arrays */ +EXTERN_STRUCT _garray; +#define t_garray struct _garray + +EXTERN t_class *garray_class; +EXTERN int garray_getfloatarray(t_garray *x, int *size, t_float **vec); +EXTERN int garray_getfloatwords(t_garray *x, int *size, t_word **vec); +EXTERN void garray_redraw(t_garray *x); +EXTERN int garray_npoints(t_garray *x); +EXTERN char *garray_vec(t_garray *x); +EXTERN void garray_resize(t_garray *x, t_floatarg f); /* avoid; use this: */ +EXTERN void garray_resize_long(t_garray *x, long n); /* better version */ +EXTERN void garray_usedindsp(t_garray *x); +EXTERN void garray_setsaveit(t_garray *x, int saveit); +EXTERN t_glist *garray_getglist(t_garray *x); +EXTERN t_array *garray_getarray(t_garray *x); +EXTERN t_class *scalar_class; + +EXTERN t_float *value_get(t_symbol *s); +EXTERN void value_release(t_symbol *s); +EXTERN int value_getfloat(t_symbol *s, t_float *f); +EXTERN int value_setfloat(t_symbol *s, t_float f); + +/* ------- GUI interface - functions to send strings to TK --------- */ +typedef void (*t_guicallbackfn)(t_gobj *client, t_glist *glist); + +EXTERN void sys_vgui(char *fmt, ...); +EXTERN void sys_gui(char *s); +EXTERN void sys_pretendguibytes(int n); +EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f); +EXTERN void sys_unqueuegui(void *client); + /* dialog window creation and destruction */ +EXTERN void gfxstub_new(t_pd *owner, void *key, const char *cmd); +EXTERN void gfxstub_deleteforkey(void *key); + +extern t_class *glob_pdobject; /* object to send "pd" messages */ + +/*------------- Max 0.26 compatibility --------------------*/ + +/* the following reflects the new way classes are laid out, with the class + pointing to the messlist and not vice versa. Externs shouldn't feel it. */ +typedef t_class *t_externclass; + +EXTERN void c_extern(t_externclass *cls, t_newmethod newroutine, + t_method freeroutine, t_symbol *name, size_t size, int tiny, \ + t_atomtype arg1, ...); +EXTERN void c_addmess(t_method fn, t_symbol *sel, t_atomtype arg1, ...); + +#define t_getbytes getbytes +#define t_freebytes freebytes +#define t_resizebytes resizebytes +#define typedmess pd_typedmess +#define vmess pd_vmess + +/* A definition to help gui objects straddle 0.34-0.35 changes. If this is +defined, there is a "te_xpix" field in objects, not a "te_xpos" as before: */ + +#define PD_USE_TE_XPIX + +#ifndef _MSC_VER /* Microoft compiler can't handle "inline" function/macros */ +#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) +/* a test for NANs and denormals. Should only be necessary on i386. */ +# if PD_FLOATSIZE == 32 +static inline int PD_BADFLOAT(t_sample f) { + t_sampleint_union u; + u.f=f; + return ((u.i & 0x7f800000)==0) || ((u.i&0x7f800000)==0x7f800000); +} +/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */ +static inline int PD_BIGORSMALL(t_sample f) { + t_sampleint_union u; + u.f=f; + return ((u.i & 0x60000000)==0) || ((u.i & 0x60000000)==0x60000000); +} +# else +# warning 64bit mode: BIGORSMALL not implemented yet +# define PD_BADFLOAT(f) 0 +# define PD_BIGORSMALL(f) 0 +# endif +#else +# define PD_BADFLOAT(f) 0 +# define PD_BIGORSMALL(f) 0 +#endif +#else /* _MSC_VER */ +#define PD_BADFLOAT(f) ((((*(unsigned int*)&(f))&0x7f800000)==0) || \ + (((*(unsigned int*)&(f))&0x7f800000)==0x7f800000)) +/* more stringent test: anything not between 1e-19 and 1e19 in absolute val */ +#define PD_BIGORSMALL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \ + (((*(unsigned int*)&(f))&0x60000000)==0x60000000)) +#endif /* _MSC_VER */ + /* get version number at run time */ +EXTERN void sys_getversion(int *major, int *minor, int *bugfix); + +#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) +} +#endif + +#define __m_pd_h_ +#endif /* __m_pd_h_ */ diff --git a/externals/lyonpotpourri/magfreq_analysis~-help.pd b/externals/lyonpotpourri/magfreq_analysis~-help.pd new file mode 100755 index 000000000..ed48d1d0a --- /dev/null +++ b/externals/lyonpotpourri/magfreq_analysis~-help.pd @@ -0,0 +1,48 @@ +#N canvas 770 168 473 383 10; +#X obj 186 212 magfreq_analysis~; +#X obj 186 262 channel~; +#X obj 186 178 osc~ 440; +#X msg 95 223 channel \$1; +#X floatatom 95 199 5 0 0 0 - - -, f 5; +#X obj 186 302 snapshot~; +#X obj 379 182 metro 100; +#X obj 379 155 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 186 334 5 0 0 0 - - -, f 5; +#X obj 282 258 channel~; +#X obj 282 298 snapshot~; +#X floatatom 282 334 5 0 0 0 - - -, f 5; +#X floatatom 186 151 5 0 0 0 - - -, f 5; +#X obj 95 150 loadbang; +#X msg 95 174 2; +#X msg 379 130 1; +#X obj 379 105 loadbang; +#X msg 252 180 fftinfo; +#X obj 9 7 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 19 198 select bin; +#X text 8 124 try different frequencies \, then see what bins they +show up in, f 69; +#X text 13 39 magfreq_analysis~ - Analyze input as magnitude/frequency +spectrum. You could use the output to drive an oscillator bank and +resynthesize the spectrum \, possibly with frequency alterations., +f 67; +#X connect 0 0 1 0; +#X connect 0 1 9 0; +#X connect 1 0 5 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 3 0 9 0; +#X connect 4 0 3 0; +#X connect 5 0 8 0; +#X connect 6 0 5 0; +#X connect 6 0 10 0; +#X connect 7 0 6 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 12 0 2 0; +#X connect 13 0 14 0; +#X connect 14 0 4 0; +#X connect 15 0 7 0; +#X connect 16 0 15 0; +#X connect 17 0 0 0; diff --git a/externals/lyonpotpourri/magfreq_analysis~.c b/externals/lyonpotpourri/magfreq_analysis~.c new file mode 100755 index 000000000..bb85d9a86 --- /dev/null +++ b/externals/lyonpotpourri/magfreq_analysis~.c @@ -0,0 +1,438 @@ +#include "MSPd.h" +#include "fftease.h" + +static t_class *magfreq_analysis_class; + +#define OBJECT_NAME "magfreq_analysis~" + +typedef struct _magfreq_analysis +{ + + t_object x_obj; + float x_f; + int R; + int N; + int N2; + int Nw; + int Nw2; + int D; + int i; + int inCount; + float *Wanal; + float *Wsyn; + float *input; + float *Hwin; + float *buffer; + float *channel; + float *output; + // for convert + float *c_lastphase_in; + float *c_lastphase_out; + float c_fundamental; + float c_factor_in; + float c_factor_out; + // for oscbank + int NP; + float P; + int L; + int first; + float Iinv; + float *lastamp; + float *lastfreq; + float *index; + float *table; + float myPInc; + float ffac; + // + float lofreq; + float hifreq; + int lo_bin; + int hi_bin; + float topfreq; + float synt; + // for fast fft + float mult; + float *trigland; + int *bitshuffle; + // + int bypass_state; + int pitch_connected; + int synt_connected; + int overlap; + int winfac; + short mute; +} t_magfreq_analysis; + +void *magfreq_analysis_new(t_symbol *s, int argc, t_atom *argv); +t_int *offset_perform(t_int *w); +t_int *magfreq_analysis_perform(t_int *w); +void magfreq_analysis_dsp(t_magfreq_analysis *x, t_signal **sp); +void magfreq_analysis_bypass(t_magfreq_analysis *x, t_floatarg state);//Pd does not accept A_LONG +void magfreq_analysis_float(t_magfreq_analysis *x, double f); +void magfreq_analysis_free(t_magfreq_analysis *x); +void magfreq_analysis_mute(t_magfreq_analysis *x, t_floatarg tog); +void magfreq_analysis_init(t_magfreq_analysis *x, short initialized); +void magfreq_analysis_lowfreq(t_magfreq_analysis *x, t_floatarg f); +void magfreq_analysis_highfreq(t_magfreq_analysis *x, t_floatarg f); +void magfreq_analysis_overlap(t_magfreq_analysis *x, t_floatarg o); +void magfreq_analysis_winfac(t_magfreq_analysis *x, t_floatarg f); +void magfreq_analysis_fftinfo(t_magfreq_analysis *x);; + + +void magfreq_analysis_tilde_setup(void) +{ + magfreq_analysis_class = class_new(gensym("magfreq_analysis~"), (t_newmethod)magfreq_analysis_new, + (t_method)magfreq_analysis_free ,sizeof(t_magfreq_analysis), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(magfreq_analysis_class, t_magfreq_analysis, x_f); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_dsp, gensym("dsp"), 0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_mute, gensym("mute"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_bypass, gensym("bypass"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_highfreq, gensym("highfreq"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_lowfreq, gensym("lowfreq"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_overlap, gensym("overlap"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_winfac, gensym("winfac"), A_DEFFLOAT,0); + class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_fftinfo, gensym("fftinfo"),0); + potpourri_announce(OBJECT_NAME); +} + + +void magfreq_analysis_mute(t_magfreq_analysis *x, t_floatarg tog) +{ + x->mute = (short)tog; +} + +void magfreq_analysis_overlap(t_magfreq_analysis *x, t_floatarg f) +{ + int i = (int) f; + if(!power_of_two(i)){ + error("%f is not a power of two",f); + return; + } + x->overlap = i; + magfreq_analysis_init(x,1); +} + +void magfreq_analysis_winfac(t_magfreq_analysis *x, t_floatarg f) +{ + int i = (int)f; + + if(!power_of_two(i)){ + error("%f is not a power of two",f); + return; + } + x->winfac = i; + magfreq_analysis_init(x,2); +} + +void magfreq_analysis_fftinfo(t_magfreq_analysis *x) +{ + if( ! x->overlap ){ + post("zero overlap!"); + return; + } + post("%s: FFT size %d, hopsize %d, windowsize %d", OBJECT_NAME, x->N, x->N/x->overlap, x->Nw); +} + +void magfreq_analysis_free(t_magfreq_analysis *x ){ + freebytes(x->c_lastphase_in,0); + freebytes(x->c_lastphase_out,0); + freebytes(x->trigland,0); + freebytes(x->bitshuffle,0); + freebytes(x->Wanal,0); + freebytes(x->Wsyn,0); + freebytes(x->input,0); + freebytes(x->Hwin,0); + freebytes(x->buffer,0); + freebytes(x->channel,0); + freebytes(x->output,0); + freebytes(x->lastamp,0); + freebytes(x->lastfreq,0); + freebytes(x->index,0); + freebytes(x->table,0); +} + +void magfreq_analysis_highfreq(t_magfreq_analysis *x, t_floatarg f) +{ + float curfreq; + + if(f < x->lofreq){ + error("current minimum is %f",x->lofreq); + return; + } + if(f > x->R/2 ){ + f = x->R/2; + } + x->hifreq = f; + x->hi_bin = 1; + curfreq = 0; + while(curfreq < x->hifreq) { + ++(x->hi_bin); + curfreq += x->c_fundamental; + } +} + +void magfreq_analysis_lowfreq(t_magfreq_analysis *x, t_floatarg f) +{ + float curfreq; + + if(f > x->hifreq){ + error("current maximum is %f",x->lofreq); + return; + } + if(f < 0 ){ + f = 0; + } + x->lofreq = f; + x->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lofreq ) { + ++(x->lo_bin); + curfreq += x->c_fundamental ; + } +} + + +void magfreq_analysis_init(t_magfreq_analysis *x, short initialized) +{ + int i; + float curfreq; + + if(!x->R)//temp init if MSP functions returned zero + x->R = 44100; + if(!x->D) + x->D = 256; + if(x->P <= 0) + x->P = 1.0; + if(!power_of_two(x->overlap)) + x->overlap = 2; + if(!power_of_two(x->winfac)) + x->winfac = 2; + x->N = x->D * x->overlap; + x->Nw = x->N * x->winfac; + // limit_fftsize(&x->N,&x->Nw,OBJECT_NAME); + x->N2 = x->N / 2; + x->Nw2 = x->Nw / 2; + x->inCount = -(x->Nw); + x->bypass_state = 0; + x->mult = 1. / (float) x->N; + x->pitch_connected = 0; + x->synt_connected = 0; + + x->L = 8192 ; + x->c_fundamental = (float) x->R/(float)( (x->N2)<<1 ); + x->c_factor_in = (float) x->R/((float)x->D * TWOPI); + x->c_factor_out = TWOPI * (float) x->D / (float) x->R; + x->Iinv = 1./x->D; + x->myPInc = x->P*x->L/x->R; + x->ffac = x->P * PI/x->N; + + if(!initialized){ + x->Wanal = (float *) getbytes( (MAX_Nw) * sizeof(float)); + x->Wsyn = (float *) getbytes( (MAX_Nw) * sizeof(float)); + x->Hwin = (float *) getbytes( (MAX_Nw) * sizeof(float)); + x->input = (float *) getbytes( MAX_Nw * sizeof(float) ); + x->output = (float *) getbytes( MAX_Nw * sizeof(float) ); + x->buffer = (float *) getbytes( MAX_N * sizeof(float) ); + x->channel = (float *) getbytes( (MAX_N+2) * sizeof(float) ); + x->bitshuffle = (int *) getbytes( MAX_N * 2 * sizeof( int ) ); + x->trigland = (float *) getbytes( MAX_N * 2 * sizeof( float ) ); + x->c_lastphase_in = (float *) getbytes( (MAX_N2+1) * sizeof(float) ); + x->c_lastphase_out = (float *) getbytes( (MAX_N2+1) * sizeof(float) ); + x->lastamp = (float *) getbytes( (MAX_N+1) * sizeof(float) ); + x->lastfreq = (float *) getbytes( (MAX_N+1) * sizeof(float) ); + x->index = (float *) getbytes( (MAX_N+1) * sizeof(float) ); + x->table = (float *) getbytes( x->L * sizeof(float) ); + x->P = 1.0; + x->ffac = x->P * PI/MAX_N; + x->mute = 0; + // x->threshgen = .0001; + + } + memset((char *)x->input,0,x->Nw * sizeof(float)); + memset((char *)x->output,0,x->Nw * sizeof(float)); + memset((char *)x->c_lastphase_in,0,(x->N2+1) * sizeof(float)); + memset((char *)x->c_lastphase_out,0,(x->N2+1) * sizeof(float)); + memset((char *)x->lastamp,0,(x->N+1) * sizeof(float)); + memset((char *)x->lastfreq,0,(x->N+1) * sizeof(float)); + memset((char *)x->index,0,(x->N+1) * sizeof(float)); + + for ( i = 0; i < x->L; i++ ) { + x->table[i] = (float) x->N * cos((float)i * TWOPI / (float)x->L); + } + init_rdft( x->N, x->bitshuffle, x->trigland); + makehanning( x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->D, 0); + + if( x->hifreq < x->c_fundamental ) { + x->hifreq = 3000.0 ; + } + x->hi_bin = 1; + curfreq = 0; + while( curfreq < x->hifreq ) { + ++(x->hi_bin); + curfreq += x->c_fundamental ; + } + + x->lo_bin = 0; + curfreq = 0; + while( curfreq < x->lofreq ) { + ++(x->lo_bin); + curfreq += x->c_fundamental ; + } + +} + +void *magfreq_analysis_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_magfreq_analysis *x = (t_magfreq_analysis *)pd_new(magfreq_analysis_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + x->lofreq = atom_getfloatarg(0,argc,argv); + x->hifreq = atom_getfloatarg(1,argc,argv); + x->overlap = atom_getfloatarg(2,argc,argv); + x->winfac = atom_getfloatarg(3,argc,argv); + + if(x->lofreq <0 || x->lofreq> 22050) + x->lofreq = 0; + if(x->hifreq <50 || x->hifreq> 22050) + x->hifreq = 4000; + + + if(!power_of_two(x->overlap)){ + x->overlap = 4; + } + if(!power_of_two(x->winfac)){ + x->winfac = 2; + } + x->R = sys_getsr(); + x->D = sys_getblksize(); + + magfreq_analysis_init(x,0); + + return (x); +} + +t_int *magfreq_analysis_perform(t_int *w) +{ + int j, in,on; + int amp,freq,chan; + + t_magfreq_analysis *x = (t_magfreq_analysis *) (w[1]); + t_float *inbuf = (t_float *)(w[2]); + t_float *magnitude_vec = (t_float *)(w[3]); + t_float *frequency_vec = (t_float *)(w[4]); + t_float *index_vec = (t_float *)(w[5]); + int n = (int) w[6]; + + int D = x->D; + int Nw = x->Nw; + int N = x->N ; + int N2 = x-> N2; + float fundamental = x->c_fundamental; + float factor_in = x->c_factor_in; + int *bitshuffle = x->bitshuffle; + float *trigland = x->trigland; + float *lastphase_in = x->c_lastphase_in; + + + float *Wanal = x->Wanal; + float *input = x->input;; + float *buffer = x->buffer; + float *channel = x->channel; + in = on = x->inCount ; + + + if(x->mute){ + for( j = 0; j < n; j++ ) { + *magnitude_vec++ = 0; + *frequency_vec++ = 0; + *index_vec++ = j; + } + return w+7; + } + + + if (x->bypass_state) { + for( j = 0; j < n; j++ ) { + *magnitude_vec++ = 0; + *frequency_vec++ = 0; + *index_vec++ = 0; + } + return w+7; + } + + in = on = x->inCount ; + + in += D; + // on += I; + + for ( j = 0 ; j < (Nw - D) ; j++ ){ + input[j] = input[j+D]; + } + for ( j = (Nw-D); j < Nw; j++) { + input[j] = *inbuf++; + } + + fold( input, Wanal, Nw, buffer, N, in ); + rdft( N, 1, buffer, bitshuffle, trigland ); + convert( buffer, channel, N2, lastphase_in, fundamental, factor_in ); + + + // start osc bank + + for ( chan = 0; chan < n; chan++ ) { + + freq = ( amp = ( chan << 1 ) ) + 1; + frequency_vec[chan] = channel[freq]; + magnitude_vec[chan] = channel[amp]; + + index_vec[chan] = chan; + } + + + + // restore state variables + x->inCount = in % Nw; + return w+7; +} + +void magfreq_analysis_bypass(t_magfreq_analysis *x, t_floatarg state) +{ + x->bypass_state = state; +} + +#if __MSP__ +void magfreq_analysis_float(t_magfreq_analysis *x, double f) // Look at floats at inlets +{ + int inlet = x->x_obj.z_in; + + if (inlet == 1) + { + /*x->P = (float)f; + x->myPInc = x->P*x->L/x->R;*/ + } + else if (inlet == 2) + { + // x->threshgen = (float)f; + } + +} +#endif + + +void magfreq_analysis_dsp(t_magfreq_analysis *x, t_signal **sp) +{ + + if(x->D != sp[0]->s_n || x->R != sp[0]->s_sr ){ + x->D = sp[0]->s_n; + x->R = sp[0]->s_sr; + magfreq_analysis_init(x,1); + } + + dsp_add(magfreq_analysis_perform, 6, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/makewindows.c b/externals/lyonpotpourri/makewindows.c new file mode 100755 index 000000000..81a80f000 --- /dev/null +++ b/externals/lyonpotpourri/makewindows.c @@ -0,0 +1 @@ +#include "fftease.h" void makewindows( float *H, float *A, float *S, int Nw, int N, int I ) { int i ; float sum ; for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ; if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) )); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/markov~-help.pd b/externals/lyonpotpourri/markov~-help.pd new file mode 100755 index 000000000..17c812788 --- /dev/null +++ b/externals/lyonpotpourri/markov~-help.pd @@ -0,0 +1,114 @@ +#N canvas 379 48 488 369 10; +#X obj 132 186 markov~ 10; +#X obj 132 220 phasor~; +#X obj 132 250 lop~ 3000; +#X obj 132 279 *~ 0.1; +#X obj 132 307 dac~; +#X floatatom 229 259 5 0 0 0 - - -, f 5; +#N canvas 447 119 548 433 bach 0; +#X obj 153 44 inlet; +#X obj 135 415 outlet; +#X obj 153 73 t b b; +#X msg 183 107 set_length 9; +#X obj 15 107 t b b b b b b b b b b; +#X msg 15 360 values 261.626 293.665 329.628 391.995 440 523.251 587.33 +659.255 698.456; +#X text 11 340 the notes in first 2 bars of JS Bach WTC 1 no. 1 prelude +; +#X msg 711 134; +#X msg 724 156; +#X msg 280 152 event_odds 0 0 1 1 0 0 0 0 0 0; +#X msg 280 172 event_odds 1 0 0 0 0 1 0 0 0 0; +#X msg 280 192 event_odds 2 0 0 0 1 0 0 0 0 0; +#X msg 280 212 event_odds 3 0 0 0 0 0 1 0 0 0; +#X msg 280 232 event_odds 4 0 0 0 0 0 0 1 0 0; +#X msg 280 254 event_odds 5 0 0 0 0 0 0 0 1 0; +#X msg 280 276 event_odds 6 0 0 0 0 0 0 0 0 1; +#X msg 281 297 event_odds 7 1 0 0 1 0 0 0 0 0; +#X msg 281 317 event_odds 8 1 0 0 0 1 0 0 0 0; +#X text 189 398 If you do not know about transition matrices please +see Xenakis's Formalized Music or whatever Web info you can find on +first order Markov chains.; +#X connect 0 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 3 0; +#X connect 3 0 1 0; +#X connect 4 0 5 0; +#X connect 4 1 17 0; +#X connect 4 2 16 0; +#X connect 4 3 15 0; +#X connect 4 4 14 0; +#X connect 4 5 13 0; +#X connect 4 6 12 0; +#X connect 4 7 11 0; +#X connect 4 8 10 0; +#X connect 4 9 9 0; +#X connect 5 0 1 0; +#X connect 9 0 1 0; +#X connect 10 0 1 0; +#X connect 11 0 1 0; +#X connect 12 0 1 0; +#X connect 13 0 1 0; +#X connect 14 0 1 0; +#X connect 15 0 1 0; +#X connect 16 0 1 0; +#X connect 17 0 1 0; +#X restore 132 142 pd bach; +#X obj 132 117 loadbang; +#N canvas 0 22 458 308 tempo-control 0; +#X obj 138 45 loadbang; +#X msg 138 69 120 4; +#X obj 138 101 unpack f f; +#X floatatom 138 127 5 0 0 0 - - -, f 5; +#X floatatom 203 127 5 0 0 0 - - -, f 5; +#X msg 138 157 tempo \$1; +#X msg 203 154 subdiv \$1; +#X obj 138 207 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 2 1 4 0; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X restore 0 87 pd tempo-control; +#X obj 131 77 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 232 218 snapshot~; +#X floatatom 232 239 5 0 0 0 - - -, f 5; +#X obj 232 174 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X obj 232 195 metro 50; +#N canvas 0 22 458 308 override 0; +#X obj 141 168 outlet; +#X msg 116 120 manual_override \$1; +#X obj 116 87 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 280 103 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X restore -4 158 pd override; +#X text 254 175 see phase (1 cycle per note); +#X text 183 138 is there a pdq external?; +#X obj -14 16 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text -14 51 markov~ - 1st order Markov chains for basic melodic +coherence, f 67; +#X connect 0 0 1 0; +#X connect 0 1 10 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 5 0 3 1; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 8 0 0 0; +#X connect 9 0 6 0; +#X connect 10 0 11 0; +#X connect 12 0 13 0; +#X connect 13 0 10 0; +#X connect 14 0 0 0; diff --git a/externals/lyonpotpourri/markov~.c b/externals/lyonpotpourri/markov~.c new file mode 100755 index 000000000..c54b45bfc --- /dev/null +++ b/externals/lyonpotpourri/markov~.c @@ -0,0 +1,290 @@ +#include "MSPd.h" + + +static t_class *markov_class; + +#define OBJECT_NAME "markov~" + +typedef struct _markov +{ + + t_object x_obj; + float x_f; + // for markov + int event_count; + int maximum_length; + float **event_weights; + int current_event; + float *values; + float current_value; + // for rhythm + int count; + int event_samples; + int subdiv; + float tempo; + + float sr; + short manual_override; + short trigger; +} t_markov; + +//void main(void) +void *markov_new(t_floatarg event_count); +t_int *markov_perform(t_int *w); +void markov_dsp(t_markov *x, t_signal **sp); +int markov_domarkov( int current_event, float **event_weights, int event_count ); +void markov_subdiv(t_markov *x, t_floatarg subdiv); +void markov_tempo(t_markov *x, t_floatarg tempo); +void markov_set_length(t_markov *x, t_floatarg length); +void markov_manual_override(t_markov *x, t_floatarg toggle); +void markov_values(t_markov *x, t_symbol *msg, short argc, t_atom *argv); +void markov_event_odds(t_markov *x, t_symbol *msg, short argc, t_atom *argv); +void markov_free( t_markov *x); +void markov_bang( t_markov *x); + +void markov_tilde_setup(void){ + markov_class = class_new(gensym("markov~"), (t_newmethod)markov_new, + (t_method)markov_free,sizeof(t_markov), 0,A_DEFFLOAT,0); + CLASS_MAINSIGNALIN(markov_class, t_markov, x_f); + class_addmethod(markov_class,(t_method)markov_dsp,gensym("dsp"),0); + class_addmethod(markov_class,(t_method)markov_subdiv,gensym("subdiv"),A_FLOAT,0); + class_addmethod(markov_class,(t_method)markov_tempo,gensym("tempo"),A_FLOAT,0); + class_addmethod(markov_class,(t_method)markov_set_length,gensym("set_length"),A_FLOAT,0); + class_addmethod(markov_class,(t_method)markov_manual_override,gensym("manual_override"),A_FLOAT,0); + class_addmethod(markov_class,(t_method)markov_values,gensym("values"),A_GIMME,0); + class_addmethod(markov_class,(t_method)markov_event_odds,gensym("event_odds"),A_GIMME,0); + class_addbang(markov_class,(t_method)markov_bang); + potpourri_announce(OBJECT_NAME); +} + + +void markov_free( t_markov *x) +{ + free( x->values ); + free( x->event_weights ); +} + +void markov_manual_override(t_markov *x, t_floatarg toggle) +{ + x->manual_override = toggle; +} + +void markov_bang(t_markov *x) +{ + x->trigger = 1; +} + +void markov_values(t_markov *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + + if( argc != x->event_count ){ + error("there must be %d values in this list", x->event_count); + return; + } + for( i = 0; i < x->event_count ; i++){ + x->values[i] = atom_getfloatarg(i, argc, argv); + } +} + +void markov_event_odds(t_markov *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + int event; + float sum = 0.0; + + float **event_weights = x->event_weights; + + if( argc != x->event_count + 1){ + error("there must be %d values in this list", x->event_count + 1); + return; + } + event = atom_getfloatarg(0, argc, argv); + if( event < 0 || event > x->event_count - 1 ){ + error("attempt to set event outside range of 0 to %d",x->event_count - 1); + return; + } + for( i = 0; i < x->event_count; i++){ + event_weights[event][i] = atom_getfloatarg( (i+1), argc, argv); + sum += event_weights[event][i]; + } + if( sum == 0.0 ){ + error("zero sum for odds - this is a very bad thing"); + return; + } else if( sum != 1.0 ){ + // post("sum was %f, rescaling to 1.0", sum); + for( i = 0; i < x->event_count; i++ ){ + event_weights[event][i] /= sum; + } + } +} + +void markov_set_length(t_markov *x, t_floatarg length) +{ + if( length < 1 || length > x->maximum_length ){ + error("%d is an illegal length", (int) length); + return; + } + x->event_count = length; + +} + +void markov_tempo(t_markov *x, t_floatarg tempo) +{ + x->tempo = tempo; + x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; +} + +void markov_subdiv(t_markov *x, t_floatarg subdiv) +{ + x->subdiv = (int) subdiv; + if( subdiv < 1 || subdiv > 128) + subdiv = 1; + x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; +} + +void *markov_new(t_floatarg event_count) +{ + + int i; + + t_markov *x = (t_markov *)pd_new(markov_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + // event_count is MAXIMUM event_count + if( event_count < 2 || event_count > 256 ){ + error("maximum event length limited to 256, set to 16 here"); + event_count = 16 ; + } + x->maximum_length = event_count; + + x->event_count = 4; // default pattern + x->count = 0; + + x->event_weights = (float **) malloc( event_count * sizeof(float *) ); + for( i = 0; i < 10; i++ ){ + x->event_weights[i] = (float *) malloc( event_count * sizeof(float) ); + } + x->values = (float *) malloc( event_count * sizeof(float) ); + + x->current_event = 0; + x->values[0] = 300; + x->values[1] = 400; + x->values[2] = 500; + x->values[3] = 600; + // weights + x->event_weights[0][0] = 0; + x->event_weights[0][1] = 0.5; + x->event_weights[0][2] = 0.5; + x->event_weights[0][3] = 0; + x->event_weights[1][0] = 0.25; + x->event_weights[1][1] = 0.5; + x->event_weights[1][2] = 0.0; + x->event_weights[1][3] = 0.25; + x->event_weights[2][0] = 1; + x->event_weights[2][1] = 0.0; + x->event_weights[2][2] = 0.0; + x->event_weights[2][3] = 0.0; + x->event_weights[3][0] = 0.33; + x->event_weights[3][1] = 0.33; + x->event_weights[3][2] = 0.34; + x->event_weights[3][3] = 0.0; + x->current_value = x->values[ x->current_event ]; + x->count = 0; + x->tempo = 60.0; + x->sr = sys_getsr(); + if( ! x->sr ){ + error("zero sampling rate - set to 44100"); + x->sr = 44100; + } + x->subdiv = 1; + x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; + + x->trigger = 0; + + return (x); +} + + +t_int *markov_perform(t_int *w) +{ + + t_markov *x = (t_markov *) (w[1]); + t_float *out = (t_float *)(w[3]); + t_float *sync = (t_float *)(w[4]); + int n = (int)(w[5]); + + int count = x->count; + int event_samples = x->event_samples; + int event_count = x->event_count; + float **event_weights = x->event_weights; + int current_event = x->current_event; + float *values = x->values; + float current_value = x->current_value; + + + if( x->manual_override ){ + while (n--) { + if( x->trigger ){ + current_event = markov_domarkov( current_event, event_weights, event_count ); + current_value = values[ current_event ]; + x->trigger = 0; + } + *out++ = current_value; + } + x->current_value = current_value; + x->current_event = current_event; + return (w+6); + } + + while (n--) { + + if( ++count >= event_samples ){ + current_event = markov_domarkov( current_event, event_weights, event_count ); + current_value = values[ current_event ]; + count = 0; + } + + *sync++ = (float) count / (float) event_samples; + + *out++ = current_value; + + } + + x->current_value = current_value; + x->count = count; + x->current_event = current_event; + + return (w+6); +} + +int markov_domarkov(int current_event, float **event_weights, int event_count) +{ + float randval; + int i; + + randval = rand() % 32768 ; + randval /= 32768.0; + + + for( i = 0; i < event_count; i++ ){ + if( randval < event_weights[current_event][i] ){ + return i; + } + randval -= event_weights[current_event][i]; + } + return 0; // should never happen +} + +void markov_dsp(t_markov *x, t_signal **sp) +{ + // long i; + if(x->sr!=sp[0]->s_sr){ + x->sr=sp[0]->s_sr;// BUG!!! in MSP code was != + x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; + x->count = 0; + } + dsp_add(markov_perform, 5, x, sp[0]->s_vec , sp[1]->s_vec, sp[2]->s_vec, + sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/mask~-help.pd b/externals/lyonpotpourri/mask~-help.pd new file mode 100755 index 000000000..16c48c83a --- /dev/null +++ b/externals/lyonpotpourri/mask~-help.pd @@ -0,0 +1,34 @@ +#N canvas 168 173 424 386 10; +#X msg 31 93 tempo \$1; +#X floatatom 31 68 5 0 0 0 - mask-tempo-in -, f 5; +#X obj 31 144 mask~ 1 0 0 0 1 0 0 0.5 0 1 0 0 0.2 0.4 0.6 0.8; +#X obj 31 205 clickhold~; +#X obj 31 232 osc~ 120; +#X obj 242 177 adsr~ 5 10 10 200 0.7 0.1; +#X obj 31 268 *~; +#X obj 31 303 *~ 0.1; +#X obj 31 329 dac~; +#X obj 31 177 mask~ 440 500 370 1000 888; +#X obj 32 8 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#N canvas 0 22 195 209 initialize 0; +#X msg 39 74 60; +#X obj 39 48 loadbang; +#X obj 39 114 s mask-tempo-in; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X restore 87 305 pd initialize; +#X text 33 41 mask~ - click-driven sequencer; +#X obj 31 119 samm~ 60 4; +#X connect 0 0 13 0; +#X connect 1 0 0 0; +#X connect 2 0 5 0; +#X connect 2 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 6 0; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 9 0 3 0; +#X connect 13 0 2 0; diff --git a/externals/lyonpotpourri/mask~.c b/externals/lyonpotpourri/mask~.c new file mode 100755 index 000000000..6dd0b4f25 --- /dev/null +++ b/externals/lyonpotpourri/mask~.c @@ -0,0 +1,363 @@ +#include "MSPd.h" + +static t_class *mask_class; + +#define MAXLEN 256 +#define MAXMASKS 1024 +#define MAXSEQ 1024 +#define OBJECT_NAME "mask~" +#define DATE "(6.6.06)" + +typedef struct +{ + float *pat; // mask pattern + int length;// length of pattern +} t_maskpat; + +typedef struct +{ + int *seq; // mask pattern + int length;// length of pattern + int phase; // keep track of where we are in sequence +} t_sequence; + +typedef struct _mask +{ + + t_object x_obj; + float x_f; + short mute;// stops all computation (try z-disable) + short gate; // continues masking but inhibits all output + short phaselock; // indicates all patterns are the same size and use the same phase count + short indexmode;//special mode where input clicks are also mask indicies (+ 1) + int phase;//phase of current pattern + int current_mask;// currently selected pattern + t_maskpat *masks;// contains the mask patterns + t_sequence sequence;// contains an optional mask sequence + int *stored_masks;// a list of patterns stored + int pattern_count;//how many patterns are stored + short noloop;// flag to play pattern only once + float *in_vec;//copy space for input to avoid dreaded vector sharing override +} t_mask; + +void *mask_new(t_symbol *msg, short argc, t_atom *argv); +t_int *mask_perform(t_int *w); +void mask_dsp(t_mask *x, t_signal **sp); +void mask_mute(t_mask *x, t_floatarg f); +void mask_phaselock(t_mask *x, t_floatarg f); +void mask_gate(t_mask *x, t_floatarg f); +void mask_addmask(t_mask *x, t_symbol *msg, short argc, t_atom *argv); +void mask_recall(t_mask *x, t_floatarg p); +void mask_showmask(t_mask *x, t_floatarg p); +void mask_indexmode(t_mask *x, t_floatarg t); +void mask_gozero(t_mask *x); +void mask_free(t_mask *x); +void mask_sequence(t_mask *x, t_symbol *msg, short argc, t_atom *argv); +void mask_noloop(t_mask *x, t_floatarg f); +void mask_playonce(t_mask *x, t_floatarg pnum); + + + +void mask_tilde_setup(void){ + mask_class = class_new(gensym("mask~"), (t_newmethod)mask_new, + (t_method)mask_free ,sizeof(t_mask), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(mask_class, t_mask, x_f); + class_addmethod(mask_class,(t_method)mask_dsp,gensym("dsp"),0); + class_addmethod(mask_class,(t_method)mask_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_phaselock,gensym("phaselock"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_gate,gensym("gate"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_addmask,gensym("addmask"),A_GIMME,0); + class_addmethod(mask_class,(t_method)mask_sequence,gensym("sequence"),A_GIMME,0); + class_addmethod(mask_class,(t_method)mask_recall,gensym("recall"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_showmask,gensym("showmask"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_indexmode,gensym("indexmode"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_playonce,gensym("playonce"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_noloop,gensym("noloop"),A_FLOAT,0); + class_addmethod(mask_class,(t_method)mask_gozero,gensym("gozero"),0); + potpourri_announce(OBJECT_NAME); +} + +void mask_playonce(t_mask *x, t_floatarg pnum) +{ + x->noloop = 1; + x->mute = 0; + mask_recall(x,pnum); +} + +void mask_indexmode(t_mask *x, t_floatarg t) +{ + x->indexmode = (short)t; +} + +void mask_gozero(t_mask *x) +{ + x->phase = 0; +} + +void mask_mute(t_mask *x, t_floatarg f) +{ + x->mute = (short)f; +} + +void mask_noloop(t_mask *x, t_floatarg f) +{ + x->noloop = (short)f; +} + +void mask_phaselock(t_mask *x, t_floatarg f) +{ + x->phaselock = (short)f; +} + +void mask_gate(t_mask *x, t_floatarg f) +{ + x->gate = (short)f; +} + + +void mask_showmask(t_mask *x, t_floatarg p){ + int location = p; + short found = 0; + int i; + int len; + + + for(i = 0; i<x->pattern_count; i++){ + if(location == x->stored_masks[i]){ + found = 1; + break; + } + } + if(found){ + len = x->masks[location].length; + post("pattern length is %d",len); + for(i = 0; i < len; i++){ + post("%d: %f",i,x->masks[location].pat[i]); + } + + } else { + error("no pattern stored at location %d",location); + } +} + +void mask_recall(t_mask *x, t_floatarg p) +{ + int i; + int location = p; + short found = 0; + + + for(i = 0; i < x->pattern_count; i++){ + if(location == x->stored_masks[i]){ + found = 1; + break; + } + } + if(found){ + x->current_mask = location; + if(! x->phaselock){ + x->phase = 0; + } + } else { + error("no pattern stored at location %d",location); + } +} + +//initiate mask recall sequence +void mask_sequence(t_mask *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + + if(argc > MAXSEQ){ + error("%d exceeds possible length for a sequence",argc); + return; + } + if(argc < 1){ + error("you must sequence at least 1 mask"); + return; + } + for(i = 0; i < argc; i++){ + x->sequence.seq[i] = atom_getfloatarg(i,argc,argv); + } + if(x->sequence.seq[0] < 0){ + post("sequencing turned off"); + x->sequence.length = 0; + return; + } + x->sequence.phase = 0; + x->sequence.length = argc; + // now load in first mask of sequence + mask_recall(x, (t_floatarg)x->sequence.seq[x->sequence.phase++]); + + // ideally would check that each sequence number is a valid stored location +} + +void mask_addmask(t_mask *x, t_symbol *msg, short argc, t_atom *argv) +{ + int location; + int i; + + if(argc < 2){ + error("must specify location and mask"); + return; + } + if(argc > MAXLEN){ + error("mask is limited to length %d",MAXLEN); + return; + } + location = atom_getintarg(0,argc,argv); + if(location < 0 || location > MAXMASKS - 1){ + error("illegal location"); + return; + } + if(x->masks[location].pat == NULL){ + x->masks[location].pat = (float *) malloc(MAXLEN * sizeof(float)); + x->stored_masks[x->pattern_count++] = location; + } else { + // post("replacing pattern stored at location %d", location); + } + // post("reading new mask from argument list, with %d members",argc-1); + x->masks[location].length = argc-1; + for(i=1; i<argc; i++){ + x->masks[location].pat[i-1] = atom_getfloatarg(i,argc,argv); + } + // post("there are currently %d patterns stored",x->pattern_count); +} + +void mask_free(t_mask *x) +{ + int i; + for(i=0;i<x->pattern_count;i++) + free(x->masks[i].pat); + free(x->masks); + free(x->stored_masks); + free(x->sequence.seq); + free(x->in_vec); +} + +void *mask_new(t_symbol *msg, short argc, t_atom *argv) +{ + int i; + t_mask *x = (t_mask *)pd_new(mask_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->masks = (t_maskpat *) malloc(MAXMASKS * sizeof(t_maskpat)); + x->stored_masks = (int *) malloc(MAXMASKS * sizeof(int)); + + x->sequence.seq = (int *) malloc(MAXSEQ * sizeof(int)); + + + /* this should be vector size, and possibly realloced in dsp routine if size changes */ + x->in_vec = (float *) malloc(8192 * sizeof(float)); + + x->sequence.length = 0; // no sequence by default + x->sequence.phase = 0; // + + // post("allocated %d bytes for basic mask holder",MAXMASKS * sizeof(t_maskpat)); + + x->current_mask = -1; // by default no mask is selected + for(i=0; i<MAXMASKS; i++){ + x->stored_masks[i] = -1; // indicates no pattern stored + x->masks[i].pat = NULL; + } + if(argc > 0){ + // post("reading initial mask from argument list, with %d members",argc); + x->masks[0].pat = (float *) malloc(MAXLEN * sizeof(float)); + // post("allocated %d bytes for this pattern", MAXLEN * sizeof(float)); + x->masks[0].length = argc; + for(i=0; i<argc; i++){ + x->masks[0].pat[i] = atom_getfloatarg(i,argc,argv); + } + x->current_mask = 0; // now we use the mask we read from the arguments + x->stored_masks[0] = 0; + x->pattern_count = 1; + } + x->indexmode = 0; + x->mute = 0; + x->gate = 1;//by default gate is on, and the pattern goes out (zero gate turns it off) + x->phaselock = 0;// by default do NOT use a common phase for all patterns + x->phase = 0; + x->noloop = 0; + + return x; +} + + +t_int *mask_perform(t_int *w) +{ + int i; + t_mask *x = (t_mask *) (w[1]); + float *inlet = (t_float *) (w[2]); + float *outlet = (t_float *) (w[3]); + int n = (int) w[4]; + + int phase = x->phase; + short gate = x->gate; + short indexmode = x->indexmode; + short noloop = x->noloop; + int current_mask = x->current_mask; + t_maskpat *masks = x->masks; + t_sequence sequence = x->sequence; + float *in_vec = x->in_vec; + + + if( x->mute || current_mask < 0){ + while(n--) *outlet++ = 0; + return (w+5); + } + + // should use memcpy() here + for(i = 0; i < n; i++){ + in_vec[i] = inlet[i]; + } + // clean outlet - should use memset() + for( i = 0; i < n; i++){ + outlet[i] = 0.0; + } + + for(i = 0; i<n; i++){ + if(in_vec[i]){ // got a click + if(indexmode){ // indexmode means the click itself controls the phase of the mask + phase = in_vec[i] - 1; + /* post("current mask: %d, length: %d, inphase %d", current_mask, masks[current_mask].length, phase); */ + if(phase < 0 || phase >= masks[current_mask].length){ + /* post("phase %d out of range", phase); */ + phase %= masks[current_mask].length; + /* post("phase reset to %d", phase); */ + } + } + if(gate){ + outlet[i] = masks[current_mask].pat[phase]; + // post("mask value: %f",outlet[i]); + } + ++phase; //advance phase in all cases (so pattern advances when gated) + if(phase >= masks[current_mask].length){ + phase = 0; + if(noloop){ + x->mute = 1; + // post("halted by noloop"); + goto out; + } + // if a sequence is active, reset the current mask too + if(sequence.length){ + mask_recall(x, (t_floatarg)sequence.seq[sequence.phase++]); + current_mask = x->current_mask; // this was reset internally! + if(sequence.phase >= sequence.length) + sequence.phase = 0; + } + } + } + } +out: + x->phase = phase; + x->sequence.phase = sequence.phase; + return (w+5); +} + + + +void mask_dsp(t_mask *x, t_signal **sp) +{ + dsp_add(mask_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/npan~-help.pd b/externals/lyonpotpourri/npan~-help.pd new file mode 100755 index 000000000..5ab3d6dea --- /dev/null +++ b/externals/lyonpotpourri/npan~-help.pd @@ -0,0 +1,113 @@ +#N canvas 687 213 522 443 10; +#X obj -38 157 npan~ 4; +#X obj 1 124 phasor~ 0.2; +#X obj -38 98 noise~; +#X obj -37 298 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore -38 255 pd meter; +#X obj 24 299 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 23 256 pd meter; +#X obj 87 299 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 86 256 pd meter; +#X obj 148 300 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 147 257 pd meter; +#X obj -44 13 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 20 158 arg: number of outlets; +#X text 80 97 Left inlet is sound to pan. Right inlet (ranging from +0-1) determines perimeter pan location.; +#X text -35 57 npan~ - perimeter panning for an arbitrary number of +channel outputs, f 69; +#X connect 0 0 4 0; +#X connect 0 1 6 0; +#X connect 0 2 8 0; +#X connect 0 3 10 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 4 0 3 0; +#X connect 6 0 5 0; +#X connect 8 0 7 0; +#X connect 10 0 9 0; diff --git a/externals/lyonpotpourri/npan~.c b/externals/lyonpotpourri/npan~.c new file mode 100755 index 000000000..60aac986c --- /dev/null +++ b/externals/lyonpotpourri/npan~.c @@ -0,0 +1,130 @@ +#include "MSPd.h" +#define OBJECT_NAME "npan~" + +#define SPEAKERMAX (1024) + +static t_class *npan_class; + + +typedef struct _npan +{ + t_object x_obj; + double pi_over_two; + double twopi; + float x_f; + int outcount; + t_float *input_locvec; + t_float *panner_locvec; +} t_npan; + +void *npan_new(t_symbol *s, short argc, t_atom *argv); +t_int *npan_perform(t_int *w); +void npan_dsp(t_npan *x, t_signal **sp); +void npan_free(t_npan *x); + +void npan_tilde_setup(void){ + npan_class = class_new(gensym("npan~"), (t_newmethod)npan_new, + (t_method)npan_free, sizeof(t_npan),0,A_GIMME,0); + CLASS_MAINSIGNALIN(npan_class, t_npan, x_f); + class_addmethod(npan_class, (t_method)npan_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *npan_new(t_symbol *s, short argc, t_atom *argv) +{ + t_npan *x; + x = (t_npan *)pd_new(npan_class); + int i; + x->outcount = (int) atom_getfloatarg(0, argc, argv); + if( x->outcount < 2 || x->outcount > SPEAKERMAX ){ + + error("npan~: output count %d exceeded range limits of 2 to %d",x->outcount, SPEAKERMAX); + x->outcount = SPEAKERMAX; + } + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); // create 2nd inlet + for(i = 0; i < x->outcount; i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + x->input_locvec = (t_float *) calloc(8192, 1); + x->panner_locvec = (t_float *) calloc(8192, 1); + x->pi_over_two = 1.5707963267948965; + x->twopi = 6.283185307179586; + return x; +} + +void npan_free(t_npan *x) +{ + free(x->panner_locvec); + free(x->input_locvec); +} + +t_int *npan_perform(t_int *w) +{ + t_npan *x = (t_npan*) w[1]; + int outcount = x->outcount; + t_float *input = (t_float*) w[2]; + t_float *panner = (t_float*) w[3]; + t_float *outlet1, *outlet2, *cleanoutlet; + t_float *input_locvec = x->input_locvec; + t_float *panner_locvec = x->panner_locvec; + + double gain1, gain2; + double insamp; + int chan1, chan2; + double panloc, frak; + int i,j; + + double pi_over_two = x->pi_over_two; + int n = (int) w[4 + outcount]; + // copy inputs + for(i = 0; i < n; i++){ + input_locvec[i] = input[i]; + panner_locvec[i] = panner[i]; + } + // clean all outlets + for( i = 0; i < outcount; i++ ){ + cleanoutlet = (t_float*) w[4 + i]; + for(j = 0; j < n; j++){ + cleanoutlet[j] = 0.0; + } + } + for(i = 0; i < n; i++){ + insamp = input_locvec[i]; + panloc = panner_locvec[i]; + if( panloc < 0 ) + panloc = 0.0; + if( panloc >= 1 ) // wrap around (otherwise crash on outlet out of range) + panloc = 0.0; + panloc *= (double) outcount; + chan1 = floor( panloc ); + chan2 = (chan1 + 1) % outcount; + frak = ( panloc - chan1 ) * pi_over_two; + gain1 = cos( frak ); + gain2 = sin( frak ); + outlet1 = (t_float*) w[chan1 + 4]; // add offset + outlet2 = (t_float*) w[chan2 + 4]; + + outlet1[i] = insamp * gain1; + outlet2[i] = insamp * gain2; + } + return (w + outcount + 5); +} + +void npan_dsp(t_npan *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count = x->outcount + 4; + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + dsp_addv(npan_perform, pointer_count, (t_int *) sigvec); + free(sigvec); +} + diff --git a/externals/lyonpotpourri/oscil~-help.pd b/externals/lyonpotpourri/oscil~-help.pd new file mode 100755 index 000000000..05efe2dcd --- /dev/null +++ b/externals/lyonpotpourri/oscil~-help.pd @@ -0,0 +1,84 @@ +#N canvas 241 327 452 381 10; +#X floatatom 134 164 5 0 0 2 frequency oscil-frequency-in -, f 5; +#X obj -59 312 dac~; +#N canvas 0 22 639 421 built-in-waveforms 0; +#X obj 121 344 outlet; +#X msg 135 88 square; +#X msg 186 89 triangle; +#X msg 254 89 buzz; +#X msg 299 89 sine; +#X msg 26 43 harmcount \$1; +#X floatatom 26 23 5 0 0 0 - - -, f 5; +#X msg 343 88 sawtooth; +#X msg 374 221 harmcount \$1; +#X floatatom 324 175 5 0 0 0 - - -, f 5; +#X obj 324 195 t b f; +#X msg 324 219 buzz; +#X obj 327 154 hsl 40 15 1 40 0 0 empty empty empty -2 -6 0 8 -36928 +-1 -1 0 1; +#X text 131 69 band-limited waveforms; +#X text 325 133 or do it dynamically; +#X msg 272 312 fadetime 50; +#X text 236 295 make sure your fade time is short for fast changes +; +#X text 118 45 set how many harmonics in bl waveforms; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 10 1 8 0; +#X connect 11 0 0 0; +#X connect 12 0 9 0; +#X connect 15 0 0 0; +#X restore -59 73 pd built-in-waveforms; +#X obj -59 221 oscil~ 220 8192 square 16; +#X floatatom 147 228 5 0 0 0 - - -, f 5; +#X msg -15 134 fadetime 5000; +#X msg 1 163 fadetime 50; +#X obj 150 209 hsl 128 15 0 0.7 0 0 empty empty gain -2 -6 0 8 -261836 +-1 -1 0 1; +#N canvas 0 22 470 320 user-waveforms 0; +#X msg 105 81 0 0 0.1 0 0.25 0.5 0 0 0.3 0.1 0.05; +#X obj 105 230 outlet; +#X msg 120 107 0 0.1 0.3 0 0 0 0 0.5 0 0 0.7 0 0 0.2 0.1; +#X msg 130 129 0 0.1 0.1 1 1 0.1 0.1; +#X msg 140 151 0 1 0.5 0.25 0.125 0.0625; +#X text 45 33 list relative weights of harmonics \, starting with DC +; +#X msg 145 198 0 1; +#X text 171 199 this is a sine; +#X connect 0 0 1 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 6 0 1 0; +#X restore -50 95 pd user-waveforms; +#X text -19 118 waveform interpolation; +#X obj -64 12 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text -61 42 oscil~ - an oscillator with arbitrary waveforms \, length +and crossfade between different waveforms; +#N canvas 0 22 450 300 initialize 0; +#X obj 78 90 loadbang; +#X msg 78 113 220; +#X obj 78 148 s oscil-frequency-in; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore -2 303 pd initialize; +#X obj -59 250 *~ 0.02; +#X connect 0 0 3 0; +#X connect 2 0 3 0; +#X connect 3 0 13 0; +#X connect 4 0 13 1; +#X connect 5 0 3 0; +#X connect 6 0 3 0; +#X connect 7 0 4 0; +#X connect 8 0 3 0; +#X connect 13 0 1 0; +#X connect 13 0 1 1; diff --git a/externals/lyonpotpourri/oscil~.c b/externals/lyonpotpourri/oscil~.c new file mode 100755 index 000000000..88dd3abb1 --- /dev/null +++ b/externals/lyonpotpourri/oscil~.c @@ -0,0 +1,789 @@ +#include "MSPd.h" +#include "string.h" + +/**/ +// NOTE: MUST PREVENT WAVEFORM UPDATE IF ALREADY IN PROGRESS + +// 7.23.04 adding bandlimited harmonic count +// 9.2.04 fixed cross fade amplitude bug +// 1.14.06 added apwave message for amp/phase creation + +#define OSCIL_MAXIMUM_HARMONICS (1024) +#define OSCIL_DEFAULT_FLEN 8192 +#define OSCIL_MAX_FLEN 1048576 +#define OSCIL_MAX_HARMS 1024 +#define OSCIL_DEFAULT_HARMONICS 10 +#define OSCIL_INIT_FREQ 440.0 +#define OSCIL_DEFAULT_WAVEFORM "sine" +#define OSCIL_NOFADE 0 +#define OSCIL_LINEAR 1 +#define OSCIL_POWER 2 + +#define OBJECT_NAME "oscil~" +#define REV "2.4.06" + + +static t_class *oscil_class; + +typedef struct _oscil +{ + + t_object x_obj; + float x_f; + int table_length; + float *wavetable; + int harmonic_count; + float *harmonic_weights; + float *harmonic_phases; + double phase; + double phase_offset; + double si_factor; + double si; + int bl_harms; + float piotwo; + float twopi; + float sr; + short mute; + short connected[4]; + float *old_wavetable; + short dirty; + float fade_ms; + int fade_samples; + int fade_countdown; + short fadetype; + short firsttime; + short fade_in_progress; + short interpolate; // flag for synthesis method + +} t_oscil; + +void *oscil_new(t_symbol *s, short argc, t_atom *argv); +static t_int *oscil_perform(t_int *w); +void oscil_dsp(t_oscil *x, t_signal **sp); +void build_waveform(t_oscil *x); +void build_amph_waveform(t_oscil *x); +void oscil_mute(t_oscil *x, t_floatarg flag); +void oscil_sine(t_oscil *x ); +void oscil_sawtooth(t_oscil *x); +void oscil_square(t_oscil *x) ; +void oscil_triangle(t_oscil *x); +void oscil_buzz(t_oscil *x ); +void oscil_list (t_oscil *x, t_symbol *msg, short argc, t_atom *argv); +void oscil_fadetime (t_oscil *x, t_floatarg fade_ms) ; +void oscil_fadetype(t_oscil *x, t_floatarg ftype); +void oscil_harmcount(t_oscil *x, t_floatarg harms); +void oscil_interpolate(t_oscil *x, t_floatarg tog); +void oscil_dsp_free(t_oscil *x); +void oscil_amph(t_oscil *x, t_symbol *msg, short argc, t_atom *argv); +t_int *oscil_perform_interpolate(t_int *w); + + +void oscil_tilde_setup(void) +{ + oscil_class = class_new(gensym("oscil~"), (t_newmethod)oscil_new, + (t_method)oscil_dsp_free ,sizeof(t_oscil), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(oscil_class, t_oscil, x_f ); + class_addmethod(oscil_class, (t_method)oscil_dsp, gensym("dsp"), 0); + class_addmethod(oscil_class, (t_method)oscil_mute, gensym("mute"), A_DEFFLOAT,0); + class_addmethod(oscil_class, (t_method)oscil_sine, gensym("sine"), 0); + class_addmethod(oscil_class, (t_method)oscil_triangle, gensym("triangle"), 0); + class_addmethod(oscil_class, (t_method)oscil_square, gensym("square"), 0); + class_addmethod(oscil_class, (t_method)oscil_sawtooth, gensym("sawtooth"), 0); + class_addmethod(oscil_class, (t_method)oscil_buzz, gensym("buzz"), 0); + class_addmethod(oscil_class, (t_method)oscil_list, gensym("list"), A_GIMME, 0); + class_addmethod(oscil_class, (t_method)oscil_amph, gensym("amph"), A_GIMME, 0); + class_addmethod(oscil_class, (t_method)oscil_fadetype, gensym("fadetype"), A_FLOAT, 0); + class_addmethod(oscil_class, (t_method)oscil_fadetime, gensym("fadetime"), A_FLOAT, 0); + class_addmethod(oscil_class, (t_method)oscil_harmcount, gensym("harmcount"), A_FLOAT, 0); + class_addmethod(oscil_class, (t_method)oscil_interpolate, gensym("interpolate"), A_FLOAT, 0); + potpourri_announce(OBJECT_NAME); +} + + +void oscil_list (t_oscil *x, t_symbol *msg, short argc, t_atom *argv) +{ + short i; + int harmonic_count = 0; + float *harmonic_weights = x->harmonic_weights; + for (i=0; i < argc; i++) { + harmonic_weights[harmonic_count] = atom_getfloatarg(i, argc, argv); + ++harmonic_count; + } + x->harmonic_count = harmonic_count ; + build_waveform(x); +} + +void oscil_amph(t_oscil *x, t_symbol *msg, short argc, t_atom *argv) +{ + short i; + int harmonic_count = 0; + float *harmonic_weights = x->harmonic_weights; + float *harmonic_phases = x->harmonic_phases; + if(argc < 1){ + return; + } + /* DC */ + harmonic_weights[0] = atom_getfloatarg(0, argc, argv); + harmonic_phases[0] = 0; + + harmonic_count = 1; + for (i=1; i < argc; i += 2) { + harmonic_weights[harmonic_count] = atom_getfloatarg(i, argc, argv); + harmonic_phases[harmonic_count] = atom_getfloatarg(i+1, argc, argv); + ++harmonic_count; + } + x->harmonic_count = harmonic_count ; + build_amph_waveform(x); +} + + +void oscil_fadetime (t_oscil *x, t_floatarg fade_ms) +{ + if(x->fade_countdown) { + error("oscil: crossfade in progress, cannot update fade time"); + return; + } + if( fade_ms < 0.0 || fade_ms > 60000.0 ){ + error("%s: %f is not a good fade time",OBJECT_NAME, fade_ms); + fade_ms = 50.; + } + x->fade_ms = fade_ms; + x->fade_samples = x->fade_ms * x->sr / 1000.0 ; +} + +void oscil_fadetype(t_oscil *x, t_floatarg ftype) +{ + + if( ftype < 0 || ftype > 2 ) { + error("%s: unknown type of fade, selecting no fade",OBJECT_NAME); + ftype = 0; + } + x->fadetype = ftype; +} + +void oscil_harmcount(t_oscil *x, t_floatarg harms) +{ + + if( harms < 1 || harms > OSCIL_MAXIMUM_HARMONICS-1) { + error("%d is out of range and must be between 1 to %d", harms,OSCIL_MAXIMUM_HARMONICS-1 ); + return; + } + x->bl_harms = harms + 1; +} + +void oscil_mute(t_oscil *x, t_floatarg flag) +{ + x->mute = (short)flag; +} + +void oscil_interpolate(t_oscil *x, t_floatarg flag) +{ + x->interpolate = (short)flag; + // post("must toggle DACs for this synthesis method"); +} + + +void *oscil_new(t_symbol *s, short argc, t_atom *argv) +{ + float init_freq; + t_symbol *init_waveform_symbol; + + t_oscil *x = (t_oscil *)pd_new(oscil_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"), gensym("signal") ); + outlet_new(&x->x_obj, gensym("signal") ); + + /* + SET DEFAULTS IN ADVANCE + added 4.14.2003 + */ + + init_freq = OSCIL_INIT_FREQ; + x->table_length = OSCIL_DEFAULT_FLEN; + init_waveform_symbol = gensym(OSCIL_DEFAULT_WAVEFORM); + x->bl_harms = OSCIL_DEFAULT_HARMONICS; + x->table_length = OSCIL_DEFAULT_FLEN ; + x->phase_offset = 0.0; + x->interpolate = 0; + + if( argc > 0 ){ + init_freq = atom_getfloatarg(0, argc, argv); + if( ! init_freq ){ + error("%s: zero initial frequency, resetting to 440",OBJECT_NAME); + init_freq = 440 ; + } + + } + if( argc > 1 ){ + x->table_length = atom_getfloatarg(1, argc, argv); + // post("table length is %d", x->table_length ); + } + if( argc > 2 ){ + init_waveform_symbol = atom_getsymbolarg(2, argc, argv); + } else { + init_waveform_symbol = gensym( OSCIL_DEFAULT_WAVEFORM ); + + } + + if( argc > 3 ) { + x->bl_harms = atom_getfloatarg(3, argc, argv); + if( x->bl_harms > 1024 ){ + error("%s: too many harmonics - limit is 1024",OBJECT_NAME); + x->bl_harms = 1024; + } + } + else { + x->bl_harms = OSCIL_DEFAULT_HARMONICS ; + } + + if( x->table_length < 4 ){ + x->table_length = OSCIL_DEFAULT_FLEN ; + } + if( x->table_length > OSCIL_MAX_FLEN ){ + x->table_length = OSCIL_MAX_FLEN; + error("%s: Exceeded maximum - setting function length to %d",OBJECT_NAME,OSCIL_MAX_FLEN); + } if( x->bl_harms < 1 || x->bl_harms > OSCIL_MAXIMUM_HARMONICS ){ + x->bl_harms = OSCIL_DEFAULT_HARMONICS ; + error("%s: Bad parameters. Bandlimited waveforms will have %d partials.", + OBJECT_NAME,OSCIL_DEFAULT_HARMONICS); + } + + + x->fade_in_progress = 0; + + x->bl_harms = x->bl_harms + 1; + x->piotwo = 2. * atan(1.0); + x->twopi = 8.0 * atan(1.0); + + + x->old_wavetable = (float *) t_getbytes( x->table_length * sizeof(float) ); + + x->wavetable = (float *) t_getbytes( x->table_length * sizeof(float) ); + x->harmonic_weights = (float *) t_getbytes( OSCIL_MAXIMUM_HARMONICS * sizeof(float) ); + x->harmonic_phases = (float *) t_getbytes( OSCIL_MAXIMUM_HARMONICS * sizeof(float) ); + x->phase = 0; + x->mute = 0; + x->dirty = 0; + x->sr = sys_getsr(); + if( ! x->sr ){ + x->sr = 44100; + error("zero sampling rate - set to 44100"); + } + x->si_factor = (float) x->table_length / x->sr; + x->si = init_freq * x->si_factor ; + x->fade_countdown = 0; + x->fade_ms = 50. ; + x->fade_samples = x->fade_ms * x->sr / 1000.0 ; + x->fadetype = OSCIL_LINEAR; + + x->firsttime = 1; + + if (init_waveform_symbol == gensym("triangle")) { + oscil_triangle( x ); + } else if (init_waveform_symbol == gensym("square")) { + oscil_square( x ); + } else if (init_waveform_symbol == gensym("sawtooth")) { + oscil_sawtooth( x ); + } else if (init_waveform_symbol == gensym("buzz")) { + oscil_buzz( x ); + } else { // default to sine wave + oscil_sine( x ); + } + + x->firsttime = 0; + + // post("Additive synthesis oscil [4.14.2003a] (as described in Audio Programming)"); + + return (x); +} + +void build_amph_waveform( t_oscil *x ) +{ + float rescale; + int i, j; + float max = 0.0; + float *wavetable = x->wavetable; + float *old_wavetable = x->old_wavetable; + float *harmonic_weights = x->harmonic_weights; + float *harmonic_phases = x->harmonic_phases; + int harmonic_count = x->harmonic_count; + int table_length = x->table_length; + float twopi = x->twopi; + // float testsum = 0.0; + float addphase; + + if( x->fade_in_progress ){ + // error("Crossfade in progress. Cannot generate waveform"); + // do not use because this will happen too often + return; + } + + + if( harmonic_count < 1 ){ + error("%s: no harmonics specified, waveform not created.",OBJECT_NAME); + return; + } + + if( x->fadetype && ! x->firsttime ){ + x->fade_countdown = x->fade_samples; + x->fade_in_progress = 1; + } + /* + for( i = 0; i < table_length ; i++ ){ + old_wavetable[i] = wavetable[i]; + } + */ + memcpy(old_wavetable, wavetable, table_length * sizeof(float) ); + + x->dirty = 1 ; + + // add DC in directly (usually 0.0) + for( i = 0; i < table_length; i++ ){ + wavetable[i] = harmonic_weights[0]; + } + // sum all specified harmonics + for( i = 1 ; i < harmonic_count; i++ ){ + if( harmonic_weights[i] ){ + addphase = twopi * harmonic_phases[i]; + // post("amp %f phase %f twopi phase %f",harmonic_weights[i],harmonic_phases[i],addphase); + for( j = 0; j < table_length; j++ ){ + wavetable[j] += + harmonic_weights[i] * sin( twopi * ((float)i * ((float)j/(float)table_length)) + addphase ) ; + } + } + } + // determine maximum amplitude. + max = 0; + for( j = 0; j < table_length; j++ ){ + if( max < fabs(wavetable[j]) ){ + max = fabs(wavetable[j]) ; + } + } + // restore last table + if( max == 0.0 ){ + for( j = 0; j < table_length; j++ ){ + wavetable[j] = old_wavetable[j]; + } + error("all zero function ignored"); + x->dirty = 0; + return; + } + // normalize waveform to maximum amplitude of 1.0 + rescale = 1.0 / max ; + + for( j = 0; j < table_length; j++ ){ + wavetable[j] *= rescale ; + } + x->dirty = 0; +} + +void build_waveform( t_oscil *x ) { + float rescale; + int i, j; + float max = 0.0; + float *wavetable = x->wavetable; + float *old_wavetable = x->old_wavetable; + float *harmonic_weights = x->harmonic_weights; + int harmonic_count = x->harmonic_count; + int table_length = x->table_length; + float twopi = x->twopi; + // float testsum = 0.0; + + if( x->fade_in_progress ){ + // error("Crossfade in progress. Cannot generate waveform"); + // do not use because this will happen too often + return; + } + + + if( harmonic_count < 1 ){ + error("no harmonics specified, waveform not created."); + return; + } + + if( x->fadetype && ! x->firsttime ){ + x->fade_countdown = x->fade_samples; + x->fade_in_progress = 1; + } + /* + for( i = 0; i < table_length ; i++ ){ + old_wavetable[i] = wavetable[i]; + } + */ + memcpy(old_wavetable, wavetable, table_length * sizeof(float) ); + + x->dirty = 1 ; + + // add DC in directly (usually 0.0) + for( i = 0; i < table_length; i++ ){ + wavetable[i] = harmonic_weights[0]; + } + // sum all specified harmonics + for( i = 1 ; i < harmonic_count; i++ ){ + if( harmonic_weights[i] ){ + for( j = 0; j < table_length; j++ ){ + wavetable[j] += harmonic_weights[i] * sin( twopi * ( (float) i * ((float) j /(float)table_length)) ) ; + } + } + } + // determine maximum amplitude. Since waveform is symmetric, we could only look for positive maximum. + max = 0; + for( j = 0; j < table_length; j++ ){ + if( max < fabs(wavetable[j]) ){ + max = fabs(wavetable[j]) ; + } + } + // restore last table + if( max == 0.0 ){ + for( j = 0; j < table_length; j++ ){ // could use memcpy here + wavetable[j] = old_wavetable[j]; + } + error("all zero function ignored"); + x->dirty = 0; + return; + } + // normalize waveform to maximum amplitude of 1.0 + rescale = 1.0 / max ; + + for( j = 0; j < table_length; j++ ){ + wavetable[j] *= rescale ; + } + x->dirty = 0; +} + +// interpolation +t_int *oscil_perform_interpolate(t_int *w) +{ + t_oscil *x = (t_oscil *) (w[1]); + t_float *freq_vec = (t_float *)(w[2]); + t_float *phase_vec = (t_float *)(w[3]); + t_float *out = (t_float *)(w[4]); + int n = (int) w[5]; + + double si_factor = x->si_factor; + double si = x->si ; + double phase = x->phase; + double phase_offset = x->phase_offset; + int table_length = x->table_length; + float *wavetable = x->wavetable; + float *old_wavetable = x->old_wavetable; + short *connected = x->connected ; + int fade_countdown = x->fade_countdown; + int iphase, iphase2; + int fade_samples = x->fade_samples; + short fadetype = x->fadetype; + float m1, m2; + float frac; + double fphase; + float sample1, sample2, outsamp1, outsamp2; + + float piotwo = x->piotwo; + + if( x->mute ){ + while (n--) { + *out++ = 0.0; + } + return (w+6); + } + /* interpolated loop */ + if(x->interpolate){ + while (n--) { + if(connected[0]) + si = *freq_vec++ * si_factor; + + if(connected[1]){ + phase_offset = (float)table_length * *phase_vec++; + + } + + fphase = (phase + phase_offset); + while( fphase >= table_length ) { + fphase -= table_length; + } + while( fphase < 0 ) { + fphase += table_length; + } + + iphase = floor(fphase); + iphase2 = (iphase+1)%table_length ; + frac = fphase - iphase; + + + if( x->dirty ){ + sample1 = old_wavetable[ iphase ]; + sample2 = old_wavetable[ iphase2 ]; + *out++ = sample1 + frac * (sample2 - sample1); + } + else if( fade_countdown ){ + + sample1 = wavetable[ iphase ]; + sample2 = wavetable[ iphase2 ]; + outsamp1 = sample1 + frac * (sample2 - sample1); + + sample1 = old_wavetable[ iphase ]; + sample2 = old_wavetable[ iphase2 ]; + outsamp2 = sample1 + frac * (sample2 - sample1); + + m2 = (float) fade_countdown / (float) fade_samples ; + m1 = 1.0 - m2 ; + --fade_countdown; + if( fadetype == 1 ){ + *out++ = m1 * outsamp1 + m2 * outsamp2 ; + } + else if( fadetype == 2 ) { + m1 *= piotwo; + *out++ = sin(m1) * outsamp1 + cos(m1) * outsamp2; + } + } else { + sample1 = wavetable[ iphase ]; + sample2 = wavetable[ iphase2 ]; + *out++ = sample1 + frac * (sample2 - sample1) ; + } + + + phase += si; + while( phase >= table_length ) { + phase -= table_length ; + } + while( phase < 0 ) { + phase += table_length ; + } + + } + } + + /* non-interpolated loop */ + else { + while (n--) { + if(connected[0]) + si = *freq_vec++ * si_factor; + + if(connected[1]){ + phase_offset = (float)table_length * *phase_vec++; + + } + + iphase = (int)(phase + phase_offset); + while( iphase >= table_length ) { + iphase -= table_length; + } + while( iphase < 0 ) { + iphase += table_length; + } + + if( x->dirty ){ + *out++ = old_wavetable[ iphase ] ; + } + else if( fade_countdown ){ + m2 = (float) fade_countdown / (float) fade_samples ; + m1 = 1.0 - m2 ; + --fade_countdown; + if( fadetype == 1 ){ + *out++ = m1 * wavetable[iphase] + m2 * old_wavetable[ iphase ] ; + } + else if( fadetype == 2 ) { + m1 *= piotwo; + *out++ = sin(m1) * wavetable[iphase] + cos(m1) * old_wavetable[ iphase ] ; + } + } else { + *out++ = wavetable[ iphase ] ; + } + + + phase += si; + while( phase >= table_length ) { + phase -= table_length ; + } + while( phase < 0 ) { + phase += table_length ; + } + + } + } + + if( ! fade_countdown ){ + x->fade_in_progress = 0; + } + x->fade_countdown = fade_countdown; + x->phase = phase; + x->phase_offset = phase_offset; + return (w+6); +} + + +static t_int *oscil_perform(t_int *w) +{ + t_oscil *x = (t_oscil *) (w[1]); + t_float *freq_vec = (t_float *)(w[2]); + t_float *phase_vec = (t_float *)(w[3]); + t_float *out = (t_float *)(w[4]); + int n = (int) w[5]; + + double si_factor = x->si_factor; + double si = x->si ; + double phase = x->phase; + double phase_offset = x->phase_offset; + int table_length = x->table_length; + float *wavetable = x->wavetable; + float *old_wavetable = x->old_wavetable; + short *connected = x->connected ; + int fade_countdown = x->fade_countdown; + int iphase; + int fade_samples = x->fade_samples; + short fadetype = x->fadetype; + float m1, m2; + float piotwo = x->piotwo; + + if( x->mute ){ + while (n--) { + *out++ = 0.0; + } + return (w+6); + } + + while (n--) { + if(connected[0]) + si = *freq_vec++ * si_factor; + + if(connected[1]){ + phase_offset = (float)table_length * *phase_vec++; + + } + + iphase = (int)(phase + phase_offset); + while( iphase >= table_length ) { + iphase -= table_length; + } + while( iphase < 0 ) { + iphase += table_length; + } + + if( x->dirty ){ + *out++ = old_wavetable[ iphase ] ; + } + else if( fade_countdown ){ + m2 = (float) fade_countdown / (float) fade_samples ; + m1 = 1.0 - m2 ; + --fade_countdown; + if( fadetype == 1 ){ + *out++ = m1 * wavetable[iphase] + m2 * old_wavetable[ iphase ] ; + } + else if( fadetype == 2 ) { + m1 *= piotwo; + *out++ = sin(m1) * wavetable[iphase] + cos(m1) * old_wavetable[ iphase ] ; + } + } else { + *out++ = wavetable[ iphase ] ; + } + + + phase += si; + while( phase >= table_length ) { + phase -= table_length ; + } + while( phase < 0 ) { + phase += table_length ; + } + + } + if( ! fade_countdown ){ + x->fade_in_progress = 0; + } + x->fade_countdown = fade_countdown; + x->phase = phase; + x->phase_offset = phase_offset; + return (w+6); +} + +void oscil_sawtooth(t_oscil *x) +{ + int i; + float sign = 1.0; + + x->harmonic_weights[0] = 0.0; // DC + x->harmonic_count = x->bl_harms; + for( i = 1 ; i < x->bl_harms; i++ ){ + x->harmonic_weights[i] = sign * 1.0/(float)i; + sign *= -1. ; + } + build_waveform(x); +} +void oscil_triangle(t_oscil *x) +{ + int i; + float sign = 1.0; + x->harmonic_weights[0] = 0.0; // DC + x->harmonic_count = x->bl_harms; + for( i = 1 ; i < x->bl_harms; i += 2 ){ + x->harmonic_weights[i] = sign * 1.0/((float)i * (float)i); + x->harmonic_weights[i + 1] = 0.0; + sign *= -1; + } + build_waveform(x); +} + +void oscil_sine(t_oscil *x) +{ + x->harmonic_weights[0] = 0.0; + x->harmonic_weights[1] = 1.0; + x->harmonic_count = 2; + build_waveform(x); +} + +void oscil_square(t_oscil *x) +{ + int i; + x->harmonic_weights[0] = 0.0; // DC + x->harmonic_count = x->bl_harms; + for( i = 1 ; i < x->bl_harms ; i += 2 ){ + x->harmonic_weights[i] = 1.0/(float)i; + x->harmonic_weights[i + 1] = 0.0; + } + build_waveform(x); +} + +void oscil_buzz(t_oscil *x) +{ + int i; + x->harmonic_weights[0] = 0.0; + x->harmonic_count = x->bl_harms; + for( i = 1 ; i < x->bl_harms; i++ ){ + x->harmonic_weights[i] = 1.0; + } + build_waveform(x); +} + +void oscil_dsp_free(t_oscil *x) +{ + + t_freebytes(x->wavetable, x->table_length * sizeof(float)); + t_freebytes(x->old_wavetable, x->table_length * sizeof(float)); + t_freebytes(x->harmonic_weights, OSCIL_MAXIMUM_HARMONICS * sizeof(float)); + t_freebytes(x->harmonic_phases, OSCIL_MAXIMUM_HARMONICS * sizeof(float)); +} + +void oscil_dsp(t_oscil *x, t_signal **sp) +{ + if(! x->sr ){ + x->sr = 44100; + } + if( x->sr != sp[0]->s_sr ){ + if(! sp[0]->s_sr){ + error("oscil~: Zero sampling rate reported!"); + return; + } + x->si *= sp[0]->s_sr / x->sr ; + x->sr = sp[0]->s_sr; + x->si_factor = (float) x->table_length / x->sr; + } + + x->connected[0] = 1; + x->connected[1] = 1; + + x->phase = 0.0; + + dsp_add(oscil_perform_interpolate, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + + +} + diff --git a/externals/lyonpotpourri/overlapadd.c b/externals/lyonpotpourri/overlapadd.c new file mode 100755 index 000000000..beab0e091 --- /dev/null +++ b/externals/lyonpotpourri/overlapadd.c @@ -0,0 +1 @@ +/* * input I is a folded spectrum of length N; output O and * synthesis window W are of length Nw--overlap-add windowed, * unrotated, unfolded input data into output O */ #include "fftease.h" void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ) { int i ; while ( n < 0 ) n += N ; n %= N ; for ( i = 0 ; i < Nw ; i++ ) { O[i] += I[n]*W[i] ; if ( ++n == N ) n = 0 ; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/pd-template.spec b/externals/lyonpotpourri/pd-template.spec new file mode 100755 index 000000000..ce9b1b8dc --- /dev/null +++ b/externals/lyonpotpourri/pd-template.spec @@ -0,0 +1,29 @@ +# This is a sample spec file for packaging Pd libraries + +#%define _topdir /home/strike/mywget +%define name template +%define release 1 +%define version 0.1 +%define buildroot %{_topdir}/%{name}-%{version}-root + +BuildRoot: %{buildroot} +Summary: replace me with a summary of your library +License: GPL +Name: %{name} +Version: %{version} +Release: %{release} +Source: %{name}-%{version}.tar.gz +Prefix: /usr +Group: Development/Tools + +%description +Replace me with a description of your library. + +%prep +%setup -q + +%build +make + +%install +make install prefix=$RPM_BUILD_ROOT/usr diff --git a/externals/lyonpotpourri/phasemod~-help.pd b/externals/lyonpotpourri/phasemod~-help.pd new file mode 100755 index 000000000..b66561f47 --- /dev/null +++ b/externals/lyonpotpourri/phasemod~-help.pd @@ -0,0 +1,105 @@ +#N canvas 472 143 283 364 10; +#X obj 18 113 phasemod~; +#X obj 18 216 dac~; +#X floatatom 18 87 5 0 0 2 freq frequency -, f 5; +#X floatatom 78 86 5 0 0 2 phase phase -, f 5; +#X obj 18 250 hsl 128 15 50 700 0 0 frequency phasemod-freq-in frequency +-2 -6 0 8 -262017 -1 -1 2188 1; +#X obj 19 280 hsl 128 15 0 30 0 0 phase phasemod-phase-in phase -2 +-6 0 8 -262017 -1 -1 6350 1; +#X floatatom 73 184 5 0 0 2 gain phasemod-gain -, f 5; +#N canvas 826 370 454 304 scope 0; +#N canvas 0 22 450 300 (subpatch) 0; +#X array phasemod-scope 441 float 3; +#A 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.000191748 0.000191748 0.000191748 0.000191748 0.000191748 +0.000191748 0.000191748 0.000191748 0.000191748 0.000191748 0.000191748 +0.000191748 0.000383495 0.000383495 0.000383495 0.000383495 0.000383495 +0.000383495 0.000383495 0.000383495 0.000575243 0.000575243 0.000575243 +0.000575243 0.000575243 0.00076699 0.00076699 0.00076699 0.00076699 +0.000958738 0.000958738 0.000958738 0.00115049 0.00115049 0.00115049 +0.00134223 0.00134223 0.00153398 0.00153398 0.00172573 0.00172573 0.00191747 +0.00191747 0.00210922 0.00210922 0.00230097 0.00249272 0.00268446 0.00268446 +0.00287621 0.00306796 0.0032597 0.00345145 0.0036432 0.00383494 0.00402669 +0.00441018 0.00460193 0.00479367 0.00517716 0.00536891 0.0057524 0.00613588 +0.00632763 0.00671112 0.0070946 0.00766983 0.00805331 0.00843679 0.00901202 +0.00939549 0.00997071 0.0105459 0.0111211 0.0118881 0.0124633 0.0132302 +0.0139971 0.014764 0.0155309 0.0164895 0.0174481 0.0184067 0.019557 +0.0205156 0.0218575 0.0230077 0.0243495 0.0256914 0.0272248 0.0287582 +0.0302915 0.0320164 0.0339328 0.0358491 0.0377653 0.0400645 0.0423635 +0.0446623 0.0471524 0.0498337 0.0527062 0.0557696 0.0588325 0.0622776 +0.065722 0.0693569 0.0733733 0.0775797 0.0819759 0.0865614 0.0915271 +0.0966813 0.102024 0.107935 0.113842 0.120317 0.127167 0.134391 0.141797 +0.149765 0.15829 0.167182 0.176627 0.186432 0.196783 0.207862 0.219475 +0.231618 0.244468 0.258016 0.272437 0.287347 0.303103 0.319684 0.33707 +0.355418 0.37452 0.394697 0.415732 0.437582 0.460539 0.484534 0.509325 +0.53516 0.561931 0.589521 0.617949 0.6472 0.677081 0.707513 0.738241 +0.769103 0.799998 0.830403 0.859988 0.888433 0.91514 0.939591 0.960963 +0.978634 0.991561 0.998833 0.999279 0.991685 0.974726 0.946971 0.907 +0.853461 0.784913 0.700158 0.598622 0.479494 0.343381 0.191139 0.025308 +-0.150712 -0.331287 -0.509655 -0.676516 -0.820993 -0.930486 -0.991636 +-0.991536 -0.91934 -0.76849 -0.539849 -0.244096 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.000191748 0.000191748 0.000191748 0.000191748 0.000191748 +0.000191748 0.000191748 0.000191748 0.000191748 0.000191748 0.000191748 +0.000191748 0.000383495 0.000383495 0.000383495 0.000383495 0.000383495 +0.000383495 0.000383495 0.000383495 0.000575243 0.000575243 0.000575243 +0.000575243 0.000575243 0.00076699 0.00076699 0.00076699 0.00076699 +0.000958738 0.000958738 0.000958738 0.00115049 0.00115049 0.00115049 +0.00134223 0.00134223 0.00134223 0.00153398 0.00153398 0.00172573 0.00172573 +0.00191747 0.00210922 0.00210922 0.00230097 0.00249272 0.00249272 0.00268446 +0.00287621 0.00306796 0.0032597 0.00345145 0.0036432 0.00383494 0.00402669 +0.00421843 0.00460193 0.00479367 0.00498542 0.00536891 0.00556065 0.00594414 +0.00632763 0.00671112 0.0070946 0.00747809 0.00786157 0.00843679 0.00882027 +0.00939549 0.00997071 0.0103542 0.0111211 0.0116963 0.0122715 0.0130385 +0.0138054 0.0145723 0.0153392 0.0162978 0.0172564 0.018215 0.0191736 +0.0203238 0.0214741 0.0226243 0.0239662 0.025308 0.0268414 0.0283748 +0.0299082 0.0316331 0.0333579 0.0352742 0.0373821 0.0394897 0.0417888 +; +#X coords 0 1 440 -1 200 140 1; +#X restore 37 20 graph; +#X obj 69 246 tabwrite~ phasemod-scope; +#X obj 69 193 inlet~; +#X obj 130 216 metro 100; +#X obj 130 197 tgl 15 0 empty phasemod-scope-tog empty 17 7 0 10 -262144 +-1 -1 1 1; +#X text 154 201 turn on scope; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 3 0; +#X restore 43 137 pd scope; +#X obj 9 7 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 13 43 phasemod~ - a phase-modulated sinusoid; +#N canvas 0 22 450 300 initialize 0; +#X msg 75 106 162; +#X msg 77 136 15; +#X obj 31 73 loadbang; +#X obj 127 124 s phasemod-freq-in; +#X obj 119 168 s phasemod-phase-in; +#X msg 97 212 0.1; +#X obj 135 243 s phasemod-gain-in; +#X msg 60 268 1; +#X obj 131 278 s phasemod-scope-tog; +#X connect 0 0 3 0; +#X connect 1 0 4 0; +#X connect 2 0 0 0; +#X connect 2 0 1 0; +#X connect 2 0 5 0; +#X connect 2 0 7 0; +#X connect 5 0 6 0; +#X connect 7 0 8 0; +#X restore 157 252 pd initialize; +#X obj 19 311 hsl 128 15 0 1 0 0 phasemod-gain phasemod-gain-in gain +-2 -6 0 8 -262017 -1 -1 1270 1; +#X text 112 133 <- look at waveform; +#X obj 18 182 *~ 0.03; +#X connect 0 0 7 0; +#X connect 0 0 13 0; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 6 0 13 1; +#X connect 13 0 1 0; +#X connect 13 0 1 1; diff --git a/externals/lyonpotpourri/phasemod~.c b/externals/lyonpotpourri/phasemod~.c new file mode 100755 index 000000000..2bcb54c1b --- /dev/null +++ b/externals/lyonpotpourri/phasemod~.c @@ -0,0 +1,167 @@ +#include "MSPd.h" +#define FUNC_LEN (32768) +#define OBJECT_NAME "phasemod~" + + +static t_class *phasemod_class; + + +typedef struct _phasemod +{ + + t_object x_obj; + float x_f; + t_float x_val; + float mygain; + float *wavetab; + float phs; + float bendphs; + float frequency; + float alpha; + short mute; + short connections[4]; + float si_fac; + float sr; +} t_phasemod; + +void *phasemod_new(t_symbol *s, int argc, t_atom *argv); +t_int *offset_perform(t_int *w); +t_int *phasemod_perform(t_int *w); +void phasemod_float(t_phasemod *x, double f); +void phasemod_int(t_phasemod *x, long n); +void phasemod_mute(t_phasemod *x, t_floatarg toggle); +void phasemod_dsp(t_phasemod *x, t_signal **sp); +void phasemod_dsp_free(t_phasemod *x); + +void phasemod_tilde_setup(void){ + phasemod_class = class_new(gensym("phasemod~"), (t_newmethod)phasemod_new, + (t_method)phasemod_dsp_free,sizeof(t_phasemod), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(phasemod_class, t_phasemod, x_f); + class_addmethod(phasemod_class,(t_method)phasemod_dsp,gensym("dsp"),0); + class_addmethod(phasemod_class,(t_method)phasemod_mute,gensym("mute"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void phasemod_dsp_free( t_phasemod *x ) +{ + free(x->wavetab); +} + +void phasemod_mute(t_phasemod *x, t_floatarg toggle) +{ + x->mute = toggle; +} +void phasemod_assist (t_phasemod *x, void *b, long msg, long arg, char *dst) +{ + if (msg==1) { + switch (arg) { + case 0: + sprintf(dst,"(signal/float) Frequency "); + break; + case 1: + sprintf(dst,"(signal/float) Slope Factor "); + break; + } + } else if (msg==2) { + sprintf(dst,"(signal) Output "); + } +} + +void *phasemod_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_phasemod *x = (t_phasemod *)pd_new(phasemod_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->phs = 0; + x->mute = 0; + x->frequency = 440.0; + + x->wavetab = (float *) calloc(FUNC_LEN, sizeof(float) ); + for( i = 0 ; i < FUNC_LEN; i++ ) { + x->wavetab[i] = sin( TWOPI * ((float)i/(float) FUNC_LEN)) ; + } + x->bendphs = 0; + x->sr = sys_getsr(); + if(!x->sr) + x->sr = 44100.0; + x->si_fac = 1.0/x->sr; + return (x); +} + +t_int *phasemod_perform(t_int *w) +{ + + float phs; + + t_phasemod *x = (t_phasemod *) (w[1]); + t_float *frequency_vec = (t_float *)(w[2]); + t_float *alpha_vec = (t_float *)(w[3]); + t_float *out = (t_float *)(w[4]); + int n = (int) w[5]; + + short *connections = x->connections; + float bendphs = x->bendphs; + float *wavetab = x->wavetab; + float si_fac = x->si_fac; + + float incr = x->frequency * si_fac ; + float alpha = x->alpha; + + if( x->mute ){ + while(n--){ + *out++ = 0.0; + } + return (w + 6); + } + + while (n--) { + if( connections[1] ){ + alpha = *alpha_vec++; + } + if( alpha == 0 ){ + alpha = .000001; + } + + if( connections[0] ){ + incr = *frequency_vec++ * si_fac ; + } + // NO NEGATIVE FREQUENCIES + if( incr < 0 ) + incr = -incr; + + bendphs += incr ; + while( bendphs > 1.0 ) + bendphs -= 1.0 ; + phs = FUNC_LEN * ( (1 - exp(bendphs * alpha))/(1 - exp(alpha)) ); + + while( phs < 0.0 ) { + phs += FUNC_LEN; + } + while( phs >= FUNC_LEN ){ + phs -= FUNC_LEN; + } + *out++ = wavetab[(int) phs] ; + } + + x->bendphs = bendphs; + return (w+6); +} + +void phasemod_dsp(t_phasemod *x, t_signal **sp) +{ + + x->connections[0] = 1; + x->connections[1] = 1; + + if(x->sr != sp[0]->s_sr){ + if(!sp[0]->s_sr){ + error("zero sampling rate"); + return; + } + x->sr = sp[0]->s_sr; + x->si_fac = 1.0/x->sr; + } + dsp_add(phasemod_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/player~-help.pd b/externals/lyonpotpourri/player~-help.pd new file mode 100755 index 000000000..b18b66b79 --- /dev/null +++ b/externals/lyonpotpourri/player~-help.pd @@ -0,0 +1,129 @@ +#N canvas 428 168 584 467 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array sf4player 14274 float 2; +#X coords 0 1 14274 -1 200 140 1; +#X restore 358 63 graph; +#X obj 26 344 dac~; +#N canvas 113 308 712 535 load-a-sound 0; +#X obj 49 170 soundfiler; +#X obj 49 119 openpanel; +#X obj 49 92 inlet; +#X msg 49 142 read -resize \$1 sf4player; +#X msg 339 115 read -resize sound/bell.aiff sf4player; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X restore 133 390 pd load-a-sound; +#X obj 133 333 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 286 190 5 0 0 0 - increment -, f 5; +#X obj 266 424 hsl 128 15 -2 2 0 0 increment empty increment -2 -6 +0 10 -143299 -1 -1 1800 1; +#N canvas 144 217 774 527 triggers 0; +#X obj 93 107 samm~ 60 1; +#X msg 93 79 mute \$1; +#X obj 93 46 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 36 253 outlet~; +#X msg 208 113 bang; +#X msg 205 72 tempo \$1; +#X floatatom 205 52 5 0 0 0 - - -, f 5; +#X obj 208 25 hsl 128 15 20 200 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 0 1; +#X text 244 115 manual play; +#X text 111 48 stop metro; +#X obj 169 250 loadbang; +#X msg 169 274 1; +#X obj 169 296 s increment; +#X obj 353 344 outlet~; +#X obj 353 283 clickhold~; +#X obj 37 185 mask~ 1 0.7 0.5 0.3 0.1; +#X obj 353 228 mask~ 1 3 2 4; +#X obj 208 138 click~; +#X connect 0 0 15 0; +#X connect 0 0 16 0; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 4 0 17 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 14 0 13 0; +#X connect 15 0 3 0; +#X connect 16 0 14 0; +#X connect 17 0 3 0; +#X restore 58 181 pd triggers; +#X msg 26 161 static_increment \$1; +#X obj 26 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 +; +#N canvas 184 101 652 543 Learn-About-Me 0; +#X text 30 61 (up to 8 simultaneous plays) so that; +#X text 30 83 if you retrigger before the last play; +#X text 33 104 is done \, the tail of the sound does; +#X text 33 127 not get cut off abruptly.; +#X text 31 41 other players \, player~ allows overlap; +#X text 42 176 By default you have continuous control; +#X text 42 215 the right inlet.) This increment controls; +#X text 42 233 ALL currently active playbacks. If you; +#X text 43 255 want independent playback (say a drum; +#X text 42 277 machine with different increments on; +#X text 45 301 each note) then turn on "static_increment."; +#X text 46 328 Then you lose direct control over increment -; +#X text 45 372 is constant. But then you can have multiple notes; +#X text 45 398 playing at different increments.; +#X text 29 22 player~ plays sound from an array. Unlike; +#X text 40 194 over the sound increment (the input to; +#X text 44 437 player~ is sample-triggered \, which means it can; +#X text 46 461 be controlled with a sample-accurate metronome; +#X text 48 482 such as samm~. This can make for a much more steady +; +#X text 46 504 rhythm then using metro.; +#X text 44 351 whatever increment is set at the onset of each note +; +#X restore 130 423 pd Learn-About-Me; +#X text 177 348 do this before turning on DACs; +#X text 161 330 <- first load in a short sound (recommend 1-5 secs.) +; +#X floatatom 63 303 5 0 0 0 - player-gain -, f 5; +#X obj 26 321 *~ 0.2; +#X obj 266 396 hsl 128 15 0 1 0 0 player-gain player-gain-in gain -2 +-8 0 10 -260987 -1 -1 0 1; +#X obj 26 91 loadbang; +#X obj 286 211 sig~; +#X obj 170 234 clean_selector~ 2; +#X obj 170 182 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 170 205 channel \$1; +#X obj 9 7 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 26 276 player~ sf4player 1 8; +#N canvas 0 22 450 300 initialize 0; +#X obj 164 103 s phasemod-scope-tog; +#X obj 153 36 loadbang; +#X msg 154 62 0.1; +#X connect 1 0 2 0; +#X restore 26 387 pd initialize; +#X msg 26 112 1; +#X text 47 137 set this for fixed increments (and polyphony); +#X text 13 53 player~ - click-driven sample-accurate array playback +; +#X text 169 275 args: channel count \, overlap count, f 38; +#X connect 3 0 2 0; +#X connect 4 0 16 0; +#X connect 6 0 21 0; +#X connect 6 1 17 0; +#X connect 7 0 21 0; +#X connect 8 0 7 0; +#X connect 12 0 13 1; +#X connect 13 0 1 0; +#X connect 13 0 1 1; +#X connect 15 0 23 0; +#X connect 16 0 17 1; +#X connect 17 0 21 1; +#X connect 18 0 19 0; +#X connect 19 0 17 0; +#X connect 21 0 13 0; +#X connect 23 0 8 0; diff --git a/externals/lyonpotpourri/player~.c b/externals/lyonpotpourri/player~.c new file mode 100755 index 000000000..dee10cd60 --- /dev/null +++ b/externals/lyonpotpourri/player~.c @@ -0,0 +1,522 @@ +#include "MSPd.h" + +static t_class *player_class; + + +#include "time.h" +#include "stdlib.h" + +#define MAX_CHANNELS (1) +#define DEFAULT_MAX_OVERLAP (8) // number of overlapping instances allowed +#define FORWARD 1 +#define BACKWARD 2 +#define ACTIVE 0 +#define INACTIVE 1 +#define MAX_VEC 2048 + +#define MAXIMUM_VECTOR (8192) + +#define OBJECT_NAME "player~" +#define COMPILE_DATE "7.3.06" + +typedef struct +{ + float phase; // current phase in frames + float gain; // gain for this note + short status;// status of this event slot + float increment;// first increment noted (only if using static increments) + +} t_event; + +typedef struct _player +{ + + t_object x_obj; + float x_f; + t_symbol *wavename; // name of waveform buffer + float sr; // sampling rate + short hosed; // buffers are bad + float fadeout; // fadeout time in sample frames (if truncation) + float sync; // input from groove sync signal + float increment; // read increment + short direction; // forwards or backwards + int most_recent_event; // position in array where last note was initiated + long b_nchans; // channels of buffer + int overlap_max; // max number of simultaneous plays + t_event *events; //note attacks + int active_events; // how many currently activated notes? + short connections[4]; // state of signal connections + short interpolation_tog; // select for interpolation or not + short mute; + short static_increment; // flag to use static increment (off by default) + // variables only for Pd + int vs; // signal vector size + float *trigger_vec; // copy of input vector (Pd only) + float *increment_vec; // copy of input vector (Pd only) + t_word *b_samples; // pointer to array data + long b_valid; // state of array + long b_frames; // number of frames (in Pd frames are mono) +} t_player; + +void player_setbuf(t_player *x, t_symbol *wavename); +void *player_new(t_symbol *msg, short argc, t_atom *argv); +t_int *player_perform_mono(t_int *w); +t_int *player_perform_mono_interpol(t_int *w); +t_int *player_perform_stereo(t_int *w); +t_int *player_perform_stereo_interpol(t_int *w); +t_int *player_perform_stereo_interpol_nocopy(t_int *w); +t_int *player_perform_hosed1(t_int *w); +t_int *player_perform_hosed2(t_int *w); +t_int *pd_player(t_int *w); + +void player_dsp(t_player *x, t_signal **sp); +float player_boundrand(float min, float max); +void player_dsp_free(t_player *x); +void player_float(t_player *x, double f); +void player_interpolation(t_player *x, t_float f); +void player_mute(t_player *x, t_floatarg f); +void player_static_increment(t_player *x, t_floatarg f); +void player_stop(t_player *x); +void player_info(t_player *x); +void player_init(t_player *x,short initialized); + +void player_tilde_setup(void) +{ + player_class = class_new(gensym("player~"), (t_newmethod)player_new, + (t_method)player_dsp_free ,sizeof(t_player), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(player_class, t_player, x_f ); + class_addmethod(player_class, (t_method)player_dsp, gensym("dsp"), 0); +// class_addmethod(player_class, (t_method)player_mute, gensym("mute"), A_DEFFLOAT,0); + class_addmethod(player_class, (t_method)player_setbuf, gensym("setbuf"),A_DEFSYM, 0); + class_addmethod(player_class, (t_method)player_mute, gensym("mute"), A_FLOAT, 0); + class_addmethod(player_class, (t_method)player_static_increment, gensym("static_increment"), A_FLOAT, 0); + class_addmethod(player_class, (t_method)player_stop, gensym("stop"), 0); + potpourri_announce(OBJECT_NAME); + +} + +void player_static_increment(t_player *x, t_floatarg f) +{ + x->static_increment = f; +} + +void player_stop(t_player *x) +{ + int i; + + for(i = 0; i < x->overlap_max; i++){ + x->events[i].status = INACTIVE; + x->events[i].phase = 0.0; + x->events[i].phase = 0.0; + x->events[i].gain = 0.0; + } +} + + + +void player_mute(t_player *x, t_floatarg f) +{ + x->mute = f; +} + + + +void *player_new(t_symbol *msg, short argc, t_atom *argv) +{ + + t_player *x = (t_player *)pd_new(player_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal") ); + if(argc < 1 || argv[0].a_type != A_SYMBOL){ + post("%s: warning: no buffer name given: defaulting to " + "empty symbol",OBJECT_NAME); + } + x->wavename = atom_getsymbolarg(0,argc,argv); + x->b_nchans = 1; + x->overlap_max = atom_getfloatarg(2,argc,argv); + if(x->overlap_max <= 0 || x->overlap_max > 128){ + x->overlap_max = DEFAULT_MAX_OVERLAP; + } + // post("%d overlaps for %s",x->overlap_max,x->wavename->s_name); + x->sr = sys_getsr(); + x->vs = sys_getblksize(); + if(!x->sr) + x->sr = 44100; + if(!x->vs) + x->vs = 256; + player_init(x,0); + // player_setbuf(x, x->wavename); + return (x); +} + +void player_init(t_player *x,short initialized) +{ + int i; + + if(!initialized){ + x->most_recent_event = 0; + x->active_events = 0; + x->increment = 1.0; + x->direction = FORWARD; + + x->events = (t_event *) calloc(x->overlap_max, sizeof(t_event)); + x->mute = 0; + x->interpolation_tog = 1; // interpolation by default + x->static_increment = 0; // by default increment is adjustable through note + for(i = 0; i < x->overlap_max; i++){ + x->events[i].status = INACTIVE; + x->events[i].increment = 0.0; + x->events[i].phase = 0.0; + x->events[i].gain = 0.0; + } + // post("using local vectors"); + x->increment_vec = malloc(MAXIMUM_VECTOR * sizeof(float)); + x->trigger_vec = malloc(MAXIMUM_VECTOR * sizeof(float)); + } else { + for(i = 0; i < x->overlap_max; i++){ + x->events[i].status = INACTIVE; + } + x->increment_vec = realloc(x->increment_vec, x->vs * sizeof(float)); + x->trigger_vec = realloc(x->trigger_vec, x->vs * sizeof(float)); + } + +} +void player_setbuf(t_player *x, t_symbol *wavename) +{ + int frames; + + t_garray *a; + + x->hosed = 0; + + x->b_frames = 0; + x->b_valid = 0; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) + { + if (*wavename->s_name) pd_error(x, "player~: %s: no such array", + wavename->s_name); + x->b_samples = 0; + x->hosed = 1; + } + else if (!garray_getfloatwords(a, &frames, &x->b_samples)) + { + pd_error(x, "%s: bad template for player~", wavename->s_name); + x->b_samples = 0; + x->hosed = 1; + } + else { + x->b_frames = frames; + x->b_valid = 1; + garray_usedindsp(a); + } + if(! x->b_valid ){ + post("player~ got invalid buffer"); + } + +} + +t_int *player_perform_hosed1(t_int *w) +{ + + // t_player *x = (t_player *) (w[1]); + float *outchan = (t_float *)(w[4]); + int n = (int) w[5]; + + memset((void *)outchan,0,sizeof(float) * n); + return(w+6); +} + +t_int *player_perform_hosed2(t_int *w) +{ + + // t_player *x = (t_player *) (w[1]); + float *out1 = (t_float *)(w[4]); + float *out2 = (t_float *)(w[5]); + int n = (int) w[6]; + + // while(n--) *outchan++ = 0.0; + memset((void *)out1,0,sizeof(float) * n); + memset((void *)out2,0,sizeof(float) * n); + return(w+7); +} + + +/* New mono version for Pd */ + +t_int *player_perform_mono_interpol(t_int *w) +{ + t_player *x = (t_player *) (w[1]); + float *t_vec = (t_float *)(w[2]); + float *i_vec = (t_float *)(w[3]); + float *outchan = (t_float *)(w[4]); + int n = (int) w[5]; + t_word *b_samples; + long b_nchans; + t_event *events = x->events; + + float increment = x->increment; + int overlap_max = x->overlap_max; + int iphase; + float fphase; + float gain; + short insert_success; + int new_insert; + int i,j,k; + float *trigger_vec = x->trigger_vec; + float *increment_vec = x->increment_vec; + short bail; + short static_increment = x->static_increment; + float maxphase; + float frac; + int theft_candidate; + int flimit; + float samp1, samp2; + long b_frames; + float vincrement; + + if(x->mute || x->hosed){ + memset((void *)outchan,0,sizeof(float) * n); + return(w+6); + } + player_setbuf(x, x->wavename); + b_samples = x->b_samples; + b_nchans = x->b_nchans; + b_frames = x->b_frames; + + if(! x->b_valid) { + player_stop(x); + memset((void *)outchan,0,sizeof(float) * n); + return(w+6); + } + // DO THIS BETTER + + for(i = 0; i < n; i++){ + trigger_vec[i] = t_vec[i]; + increment_vec[i] = i_vec[i]; + } + + + /* test if we even need to do anything */ + bail = 1; + for(i = 0; i < overlap_max; i++){ + if(events[i].status == ACTIVE){ + bail = 0; + break; + } + } + if(bail){ + for(i = 0; i < n; i++){ + if(trigger_vec[i]){ + bail = 0; + } + } + } + if(bail){ + memset((void *)outchan,0,sizeof(float) * n); + return(w+6); + } + + /* main sample playback code */ + + vincrement = increment_vec[0]; + + memset((void *)outchan,0,sizeof(float) * n); + flimit = (b_frames - 1) * 2; + for(i = 0; i < overlap_max; i++){ + if(events[i].status == ACTIVE){ + gain = events[i].gain; + for(j = 0; j < n; j++){ //vector loop + iphase = events[i].phase; + frac = events[i].phase - iphase; + if(static_increment){ + increment = events[i].increment; + } else { + + increment = increment_vec[j]; + + } + // iphase *= 2; + if(increment > 0){ // moving forward into sample + if(iphase == flimit){ + outchan[j] += b_samples[iphase].w_float * gain; + } else { + samp1 = b_samples[iphase].w_float; + samp2 = b_samples[iphase + 1].w_float; + outchan[j] += gain * (samp1 + frac * (samp2-samp1)); + } + } + // moving backwards into sample + else { + if(iphase == 0.0){ + outchan[j] += b_samples[iphase].w_float * gain; + } else { + samp2 = b_samples[iphase].w_float; + samp1 = b_samples[iphase - 1].w_float; + outchan[j] += gain * (samp1 + frac * (samp2-samp1)); + } + } + + if(static_increment){ + events[i].phase += events[i].increment; + } + else { + + + events[i].phase += increment_vec[j]; + + } + if( events[i].phase < 0.0 || events[i].phase >= b_frames){ + events[i].status = INACTIVE; + break; + } + } + } + } + /* trigger responder and initial playback code */ + for(i=0; i<n; i++){ + if(trigger_vec[i]){ + gain = trigger_vec[i]; + + increment = increment_vec[i]; + insert_success = 0; + + /* put new event into event list */ + for(j=0; j<overlap_max; j++){ + if(events[j].status == INACTIVE){ + events[j].status = ACTIVE; + events[j].gain = gain; + events[j].increment = increment; + if(increment > 0){ + events[j].phase = 0.0; + } else { + events[j].phase = b_frames - 1; + } + insert_success = 1; + new_insert = j; + break; + } + } + + if(!insert_success){ // steal a note if necessary + + maxphase = 0; + theft_candidate = 0; + for(k = 0; k < overlap_max; k++){ + if(events[k].phase > maxphase){ + maxphase = events[k].phase; + theft_candidate = k; + } + } + // post("stealing note at slot %d", theft_candidate); + new_insert = theft_candidate; + events[new_insert].gain = gain; + events[new_insert].increment = increment; + if(increment > 0){ + events[new_insert].phase = 0.0; + } else { + events[new_insert].phase = b_frames - 1; + } + insert_success = 1; + } + + for(k=i; k<n; k++){ + + //roll out for remaining portion of vector + fphase = events[new_insert].phase; + iphase = (int)floorf(fphase); + frac = fphase - iphase; + // iphase *= 2; // double for stereo + /* do interpolation */ + if(increment > 0){ // moving forward into sample + if(iphase == flimit){ + outchan[k] += b_samples[iphase].w_float * gain; + } else { + samp1 = b_samples[iphase].w_float; + samp2 = b_samples[iphase + 1].w_float; + outchan[k] += gain * (samp1 + frac * (samp2-samp1)); + } + } + // moving backwards into sample + else { + if(iphase == 0.0){ + outchan[k] += b_samples[iphase].w_float * gain; + } else { + samp2 = b_samples[iphase].w_float; + samp1 = b_samples[iphase - 1].w_float; + outchan[k] += gain * (samp1 + frac * (samp2-samp1)); + } + } + /* advance phase */ + if(static_increment){ + increment = events[new_insert].increment; + } else { + + increment = increment_vec[k]; + } + + events[new_insert].phase += increment; + + + /* note termination conditions */ + if( events[new_insert].phase < 0.0 || events[new_insert].phase >= b_frames){ + events[new_insert].status = INACTIVE; + break; + } + } + } + } + return (w+6); +} + + + +float player_boundrand(float min, float max) +{ + return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); +} + + +void player_dsp_free(t_player *x) +{ + + free(x->events); + free(x->increment_vec); + free(x->trigger_vec); + +} + +void player_dsp(t_player *x, t_signal **sp) +{ + + player_setbuf(x, x->wavename); + + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + if(!x->sr){ + post("warning: zero sampling rate!"); + x->sr = 44100; + } + } + + if(x->vs != sp[0]->s_n){ + x->vs = sp[0]->s_n; + player_init(x,1); + } + + if(x->b_frames <= 0 && ! x->hosed){ + post("empty buffer, external disabled until it a sound is loaded"); + x->hosed = 1; + } + + + player_stop(x); // turn off all players to start + + if(x->hosed) + dsp_add(player_perform_hosed1, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + else{ + dsp_add(player_perform_mono_interpol, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } + +} diff --git a/externals/lyonpotpourri/poltocar~-help.pd b/externals/lyonpotpourri/poltocar~-help.pd new file mode 100755 index 000000000..f94f1fc3c --- /dev/null +++ b/externals/lyonpotpourri/poltocar~-help.pd @@ -0,0 +1,56 @@ +#N canvas 506 441 450 300 10; +#N canvas 91 32 532 393 basic-fft 0; +#X obj 225 66 inlet~; +#X obj 225 341 outlet~; +#X obj 225 98 windowvec~; +#X obj 225 136 rfft~, f 6; +#X obj 75 341 block~ 1024 8; +#X obj 225 171 cartopol~; +#X obj 225 215 poltocar~; +#X obj 225 245 rifft~; +#X obj 225 308 windowvec~; +#X obj 225 275 *~ 0; +#X obj 394 185 *; +#X msg 346 107 1 1024 8; +#X obj 346 138 unpack f f f; +#X obj 346 217 /; +#X floatatom 346 249 12 0 0 0 - - -, f 12; +#X text 427 250 rescale factor; +#X obj 346 76 loadbang; +#X text 28 195 Any processing would go here ->; +#X text 44 321 sets FFT size and overlap; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 5 1; +#X connect 5 0 6 0; +#X connect 5 1 6 1; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 13 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 10 0; +#X connect 12 2 10 1; +#X connect 13 0 14 0; +#X connect 14 0 9 1; +#X connect 16 0 11 0; +#X restore 30 119 pd basic-fft; +#X obj 30 92 osc~ 440; +#X obj 30 193 dac~; +#X obj 30 155 *~ 0.01; +#X floatatom 30 69 5 0 0 0 - - -, f 5; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X floatatom 101 156 5 0 0 2 gain - -, f 5; +#X text 23 36 poltocar~ converts from polar form to rfft~ complex format. +; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 3 0 2 1; +#X connect 4 0 1 0; +#X connect 6 0 3 1; diff --git a/externals/lyonpotpourri/poltocar~.c b/externals/lyonpotpourri/poltocar~.c new file mode 100755 index 000000000..d7e0de291 --- /dev/null +++ b/externals/lyonpotpourri/poltocar~.c @@ -0,0 +1,67 @@ +#include "MSPd.h" + +static t_class *poltocar_class; + +/* Pd version of poltocar~ */ + +#define OBJECT_NAME "poltocar~" +typedef struct _poltocar +{ + t_object x_obj; + t_float x_f; +} t_poltocar; + +void *poltocar_new(t_symbol *msg, short argc, t_atom *argv); +void poltocar_free(t_poltocar *x); +void poltocar_dsp(t_poltocar *x, t_signal **sp); + + +void poltocar_tilde_setup(void){ + poltocar_class = class_new(gensym("poltocar~"), (t_newmethod)poltocar_new, + 0, sizeof(t_poltocar),0,A_GIMME,0); + CLASS_MAINSIGNALIN(poltocar_class, t_poltocar, x_f); + class_addmethod(poltocar_class, (t_method)poltocar_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *poltocar_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_poltocar *x = (t_poltocar *)pd_new(poltocar_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + return x; +} + +t_int *poltocar_perform(t_int *w) +{ + int i; + t_poltocar *x = (t_poltocar *) w[1]; + t_float *mag_in = (t_float *) w[2]; + t_float *phase_in = (t_float *) w[3]; + t_float *real_out = (t_float *) w[4]; + t_float *imag_out = (t_float *) w[5]; + t_float real, imag; + + int n = (int) w[6]; // obj, func, 1 inlet + int N2 = n/2; + + for(i = 0; i < N2 + 1; i++){ + real = mag_in[i] * cos( phase_in[i] ); + if(i == N2){ + imag = 0; + } else{ + imag = -mag_in[i] * sin( phase_in[i] ); + } + real_out[i] = real; + imag_out[i] = imag; + } + + return (w + 7); +} + +void poltocar_dsp(t_poltocar *x, t_signal **sp) +{ + dsp_add(poltocar_perform,6, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); +} diff --git a/externals/lyonpotpourri/power_of_two.c b/externals/lyonpotpourri/power_of_two.c new file mode 100755 index 000000000..038c6a326 --- /dev/null +++ b/externals/lyonpotpourri/power_of_two.c @@ -0,0 +1,17 @@ + +int power_of_two(int test) +{ + int limit = 8192; + int compare = 1; + // post("testing what we thing is an int:%d",test); + do { + if(test == compare){ + // post("good power of 2 found!"); + return 1; + } + compare *= 2; + } while (compare <= limit); + + return 0; +} + diff --git a/externals/lyonpotpourri/pulser~-help.pd b/externals/lyonpotpourri/pulser~-help.pd new file mode 100755 index 000000000..f0cf79744 --- /dev/null +++ b/externals/lyonpotpourri/pulser~-help.pd @@ -0,0 +1,54 @@ +#N canvas 196 132 459 311 10; +#X msg -14 114 harmonics \$1; +#X floatatom -14 90 5 0 0 0 - pulser-harmonic-count -, f 5; +#X floatatom 94 104 5 0 0 2 freq pulser-frequency -, f 5; +#X obj 157 93 osc~ 0.1; +#X obj 157 115 *~ 0.4; +#X obj 157 139 +~ 0.5; +#X obj 69 214 *~ 0.1; +#X floatatom 108 194 5 0 0 1 gain pulser-gain -, f 5; +#X obj 69 251 dac~; +#X floatatom 157 73 5 0 0 0 - pulser-pw-speed -, f 5; +#X obj 69 174 pulser~ 74 12; +#X text 163 158 <- pulsewidth; +#X obj -19 14 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#N canvas 658 263 450 300 initialize 0; +#X obj 170 210 s pulser-frequency; +#X obj 170 154 loadbang; +#X msg 170 181 74; +#X obj 41 87 s pulser-harmonic-count; +#X obj 40 34 loadbang; +#X msg 41 60 12; +#X obj 277 116 s pulser-pw-speed-in; +#X obj 277 49 loadbang; +#X msg 277 91 0.1; +#X obj 21 161 s pulser-gain-in; +#X msg 22 140 0.1; +#X obj 23 118 loadbang; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 10 0 9 0; +#X connect 11 0 10 0; +#X restore 131 250 pd initialize; +#X obj 228 85 hsl 128 15 0 1 0 0 pulser-pw-speed pulser-pw-speed-in +pulsewidth-modulation-speed -2 -8 0 10 -83269 -1 -1 400 1; +#X obj 227 116 hsl 128 15 0 1 0 0 pulser-gain pulser-gain-in gain -2 +-8 0 10 -83269 -1 -1 1270 1; +#X text -20 48 pulser~ - A pulsewave with variable pulsewidth; +#X text 164 175 args: initial frequency \, # of harmonics; +#X connect 0 0 10 0; +#X connect 1 0 0 0; +#X connect 2 0 10 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 5 0 10 1; +#X connect 6 0 8 0; +#X connect 6 0 8 1; +#X connect 7 0 6 1; +#X connect 9 0 3 0; +#X connect 10 0 6 0; diff --git a/externals/lyonpotpourri/pulser~.c b/externals/lyonpotpourri/pulser~.c new file mode 100755 index 000000000..4e64c32af --- /dev/null +++ b/externals/lyonpotpourri/pulser~.c @@ -0,0 +1,214 @@ +#include "MSPd.h" + +#define FUNC_LEN (16384) +#define FUNC_LEN_OVER2 (8192) +#define MAX_COMPONENTS (256) + +#define OBJECT_NAME "pulser~" + +static t_class *pulser_class; + + +typedef struct _pulser +{ + + t_object x_obj; + float x_f; + int components; + float global_gain; + float *wavetab; + + float *phases; + float frequency; + float pulsewidth; + float si_fac; + short mute; + short connected[4]; + float sr; +} t_pulser; + +void *pulser_new(t_symbol *s, int argc, t_atom *argv); + +t_int *pulser_perform(t_int *w); +void pulser_dsp(t_pulser *x, t_signal **sp); +void pulser_mute(t_pulser *x, t_floatarg toggle); +void pulser_harmonics(t_pulser *x, t_floatarg c); +void pulser_float(t_pulser *x, double f); +void pulser_free(t_pulser *x); + +void pulser_tilde_setup(void){ + pulser_class = class_new(gensym("pulser~"), (t_newmethod)pulser_new, + (t_method)pulser_free,sizeof(t_pulser), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(pulser_class, t_pulser, x_f); + class_addmethod(pulser_class,(t_method)pulser_dsp,gensym("dsp"),0); + class_addmethod(pulser_class,(t_method)pulser_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(pulser_class,(t_method)pulser_harmonics,gensym("harmonics"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void pulser_mute(t_pulser *x, t_floatarg toggle) +{ + x->mute = toggle; +} + +void pulser_harmonics(t_pulser *x, t_floatarg c) +{ + if(c < 2 || c > MAX_COMPONENTS){ + error("harmonic count out of bounds"); + return; + } + x->components = c; + x->global_gain = 1.0 / (float) x->components ; + // reset phases too? +} + +void pulser_free(t_pulser *x) +{ + free(x->phases); + free(x->wavetab); +} + +void *pulser_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + + t_pulser *x = (t_pulser *)pd_new(pulser_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->sr = sys_getsr(); + if(!x->sr){ + error("zero sampling rate, setting to 44100"); + x->sr = 44100; + } + + x->mute = 0; + x->components = 8; + x->frequency = 440.0; + x->pulsewidth = 0.5; + + if( argc > 0 ) + x->frequency = atom_getfloatarg(0,argc,argv); + if( argc > 1 ) + x->components = atom_getfloatarg(1,argc,argv); + + x->si_fac = ((float)FUNC_LEN/x->sr) ; + + if(x->components <= 0 || x->components > MAX_COMPONENTS){ + error("%d is an illegal number of components, setting to 8",x->components ); + x->components = 8; + } + x->global_gain = 1.0 / (float) x->components ; + x->phases = (float *) calloc(MAX_COMPONENTS, sizeof(float) ); + x->wavetab = (float *) calloc(FUNC_LEN, sizeof(float) ); + + for(i = 0 ; i < FUNC_LEN; i++) { + x->wavetab[i] = sin(TWOPI * ((float)i/(float) FUNC_LEN)) ; + } + return (x); +} + + +t_int *pulser_perform(t_int *w) +{ + + int i,j; + float gain; + float incr; + + float outsamp; + int lookdex; + t_pulser *x = (t_pulser *) (w[1]); + t_float *frequency_vec = (t_float *)(w[2]); + t_float *pulsewidth_vec = (t_float *)(w[3]); + t_float *out = (t_float *)(w[4]); + int n = (int) w[5]; + + + float *wavetab = x->wavetab; + float si_fac = x->si_fac; + + float *phases = x->phases; + int components = x->components; + float global_gain = x->global_gain; + float pulsewidth = x->pulsewidth; + float frequency = x->frequency; + short *connected = x->connected; + + if( x->mute ) + { + while( n-- ){ + *out++ = 0.0; + } + return (w+6); + } + + incr = frequency * si_fac; + + while (n--) { + + if( connected[1] ){ + pulsewidth = *pulsewidth_vec++; + // post("pw %f",pulsewidth); + } + if( pulsewidth < 0 ) + pulsewidth = 0; + if( pulsewidth > 1 ) + pulsewidth = 1; + + if( connected[0] ){ + incr = *frequency_vec++ * si_fac ; + } + + outsamp = 0; + + for( i = 0, j = 1; i < components; i++, j++ ){ + + lookdex = (float)FUNC_LEN_OVER2 * pulsewidth * (float)j; + + while( lookdex >= FUNC_LEN ){ + lookdex -= FUNC_LEN; + } + + gain = wavetab[ lookdex ] ; + + phases[i] += incr * (float) j; + while( phases[i] < 0.0 ) { + phases[i] += FUNC_LEN; + } + while( phases[i] >= FUNC_LEN ){ + phases[i] -= FUNC_LEN; + } + outsamp += gain * wavetab[ (int) phases[i] ]; + + } + *out++ = outsamp * global_gain; + } + + // x->bendphs = bendphs; + return (w+6); +} + +void pulser_dsp(t_pulser *x, t_signal **sp) +{ + long i; + + if(!sp[0]->s_sr){ + error("zero sampling rate"); + return; + } + + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + x->si_fac = ((float)FUNC_LEN/x->sr); + for(i=0;i<MAX_COMPONENTS;i++){ + x->phases[i] = 0.0; + } + } + for( i = 0; i < 2; i++){ + + x->connected[i] = 1; + } + dsp_add(pulser_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); +} + + diff --git a/externals/lyonpotpourri/qsortE.c b/externals/lyonpotpourri/qsortE.c new file mode 100755 index 000000000..0fa7e50e5 --- /dev/null +++ b/externals/lyonpotpourri/qsortE.c @@ -0,0 +1 @@ +/* Plug-compatible replacement for UNIX qsort. Copyright (C) 1989 Free Software Foundation, Inc. Written by Douglas C. Schmidt (schmidt@ics.uci.edu) This file is part of GNU CC. GNU QSORT 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. GNU QSORT 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 GNU QSORT; see the file COPYING. If not, write to the Free the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Synched up with: FSF 19.28. */ #ifdef sparc #include <alloca.h> #endif #include <stdlib.h> /* Invoke the comparison function, returns either 0, < 0, or > 0. */ #define CMP(A,B) ((*cmp)((A),(B))) /* Byte-wise swap two items of size SIZE. */ #define SWAP(A,B,SIZE) do {int sz = (SIZE); char *a = (A); char *b = (B); \ do { char _temp = *a;*a++ = *b;*b++ = _temp;} while (--sz);} while (0) /* Copy SIZE bytes from item B to item A. */ #define COPY(A,B,SIZE) {int sz = (SIZE); do { *(A)++ = *(B)++; } while (--sz); } /* This should be replaced by a standard ANSI macro. */ #define BYTES_PER_WORD 8 /* The next 4 #defines implement a very fast in-line stack abstraction. */ #define STACK_SIZE (BYTES_PER_WORD * sizeof (long)) #define PUSH(LOW,HIGH) do {top->lo = LOW;top++->hi = HIGH;} while (0) #define POP(LOW,HIGH) do {LOW = (--top)->lo;HIGH = top->hi;} while (0) #define STACK_NOT_EMPTY (stack < top) /* Discontinue quicksort algorithm when partition gets below this size. This particular magic number was chosen to work best on a Sun 4/260. */ #define MAX_THRESH 4 /* requisite prototype */ int qsortE (char *base_ptr, int total_elems, int size, int (*cmp)()); /* Stack node declarations used to store unfulfilled partition obligations. */ typedef struct { char *lo; char *hi; } stack_node; /* Order size using quicksort. This implementation incorporates four optimizations discussed in Sedgewick: 1. Non-recursive, using an explicit stack of pointer that store the next array partition to sort. To save time, this maximum amount of space required to store an array of MAX_INT is allocated on the stack. Assuming a 32-bit integer, this needs only 32 * sizeof (stack_node) == 136 bits. Pretty cheap, actually. 2. Choose the pivot element using a median-of-three decision tree. This reduces the probability of selecting a bad pivot value and eliminates certain extraneous comparisons. 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving insertion sort to order the MAX_THRESH items within each partition. This is a big win, since insertion sort is faster for small, mostly sorted array segments. 4. The larger of the two sub-partitions is always pushed onto the stack first, with the algorithm then concentrating on the smaller partition. This *guarantees* no more than log (n) stack size is needed (actually O(1) in this case)! */ int qsortE (char *base_ptr, int total_elems, int size, int (*cmp)()) { /* Allocating SIZE bytes for a pivot buffer facilitates a better algorithm below since we can do comparisons directly on the pivot. */ char *pivot_buffer = (char *) malloc(size); int max_thresh = MAX_THRESH * size; if (total_elems > MAX_THRESH) { char *lo = base_ptr; char *hi = lo + size * (total_elems - 1); stack_node stack[STACK_SIZE]; /* Largest size needed for 32-bit int!!! */ stack_node *top = stack + 1; while (STACK_NOT_EMPTY) { char *left_ptr; char *right_ptr; { char *pivot = pivot_buffer; { /* Select median value from among LO, MID, and HI. Rearrange LO and HI so the three values are sorted. This lowers the probability of picking a pathological pivot value and skips a comparison for both the LEFT_PTR and RIGHT_PTR. */ char *mid = lo + size * ((hi - lo) / size >> 1); if (CMP (mid, lo) < 0) SWAP (mid, lo, size); if (CMP (hi, mid) < 0) SWAP (mid, hi, size); else goto jump_over; if (CMP (mid, lo) < 0) SWAP (mid, lo, size); jump_over: COPY (pivot, mid, size); pivot = pivot_buffer; } left_ptr = lo + size; right_ptr = hi - size; /* Here's the famous ``collapse the walls'' section of quicksort. Gotta like those tight inner loops! They are the main reason that this algorithm runs much faster than others. */ do { while (CMP (left_ptr, pivot) < 0) left_ptr += size; while (CMP (pivot, right_ptr) < 0) right_ptr -= size; if (left_ptr < right_ptr) { SWAP (left_ptr, right_ptr, size); left_ptr += size; right_ptr -= size; } else if (left_ptr == right_ptr) { left_ptr += size; right_ptr -= size; break; } } while (left_ptr <= right_ptr); } /* Set up pointers for next iteration. First determine whether left and right partitions are below the threshold size. If so, ignore one or both. Otherwise, push the larger partition's bounds on the stack and continue sorting the smaller one. */ if ((right_ptr - lo) <= max_thresh) { if ((hi - left_ptr) <= max_thresh) /* Ignore both small partitions. */ POP (lo, hi); else /* Ignore small left partition. */ lo = left_ptr; } else if ((hi - left_ptr) <= max_thresh) /* Ignore small right partition. */ hi = right_ptr; else if ((right_ptr - lo) > (hi - left_ptr)) /* Push larger left partition indices. */ { PUSH (lo, right_ptr); lo = left_ptr; } else /* Push larger right partition indices. */ { PUSH (left_ptr, hi); hi = right_ptr; } } } /* Once the BASE_PTR array is partially sorted by quicksort the rest is completely sorted using insertion sort, since this is efficient for partitions below MAX_THRESH size. BASE_PTR points to the beginning of the array to sort, and END_PTR points at the very last element in the array (*not* one beyond it!). */ #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) { char *end_ptr = base_ptr + size * (total_elems - 1); char *run_ptr; char *tmp_ptr = base_ptr; char *thresh = MIN (end_ptr, base_ptr + max_thresh); /* Find smallest element in first threshold and place it at the array's beginning. This is the smallest array element, and the operation speeds up insertion sort's inner loop. */ for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size) if (CMP (run_ptr, tmp_ptr) < 0) tmp_ptr = run_ptr; if (tmp_ptr != base_ptr) SWAP (tmp_ptr, base_ptr, size); /* Insertion sort, running from left-hand-side up to `right-hand-side.' Pretty much straight out of the original GNU qsort routine. */ for (run_ptr = base_ptr + size; (tmp_ptr = run_ptr += size) <= end_ptr; ) { while (CMP (run_ptr, tmp_ptr -= size) < 0) ; if ((tmp_ptr += size) != run_ptr) { char *trav; for (trav = run_ptr + size; --trav >= run_ptr;) { char c = *trav; char *hi, *lo; for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo) *hi = *lo; *hi = c; } } } } return 1; } \ No newline at end of file diff --git a/externals/lyonpotpourri/quadpan~-help.pd b/externals/lyonpotpourri/quadpan~-help.pd new file mode 100755 index 000000000..f758a8c92 --- /dev/null +++ b/externals/lyonpotpourri/quadpan~-help.pd @@ -0,0 +1,120 @@ +#N canvas 87 151 509 477 10; +#X obj 7 206 quadpan~, f 29; +#X obj 8 316 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 7 273 pd meter; +#X obj 69 317 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 68 274 pd meter; +#X obj 132 317 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 131 274 pd meter; +#X obj 193 318 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; +#N canvas 0 22 450 300 meter 0; +#X obj 110 164 snapshot~; +#X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 110 187 5 0 0 0 - - -, f 5; +#X obj 110 91 env~ 1024; +#X obj 126 140 metro 100; +#X obj 109 211 - 100; +#X obj 231 46 loadbang; +#X msg 231 71 1; +#X obj 109 246 outlet; +#X obj 110 51 inlet~; +#X connect 0 0 2 0; +#X connect 1 0 4 0; +#X connect 2 0 5 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 9 0 3 0; +#X restore 192 275 pd meter; +#X obj 95 105 hsl 128 15 0 1 0 0 empty empty X-coordinate -2 -8 0 10 +-262144 -1 -1 0 1; +#X obj 107 146 hsl 128 15 0 1 0 0 empty empty Y-coordinate -2 -8 0 +10 -262144 -1 -1 0 1; +#X text 5 61 quadpan~ takes in X/Y cordinates (as signal or float) +to position a signal within a quadraphonic plane.; +#X obj 7 154 osc~ 440; +#X obj 11 25 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 195 169 Spatial positioning of output channels; +#X text 195 187 is as follows:; +#X text 360 223 3; +#X text 292 223 4; +#X text 362 275 1; +#X text 291 275 2; +#X connect 0 0 2 0; +#X connect 0 1 4 0; +#X connect 0 2 6 0; +#X connect 0 3 8 0; +#X connect 2 0 1 0; +#X connect 4 0 3 0; +#X connect 6 0 5 0; +#X connect 8 0 7 0; +#X connect 9 0 0 1; +#X connect 10 0 0 2; +#X connect 12 0 0 0; diff --git a/externals/lyonpotpourri/quadpan~.c b/externals/lyonpotpourri/quadpan~.c new file mode 100755 index 000000000..a43c02c07 --- /dev/null +++ b/externals/lyonpotpourri/quadpan~.c @@ -0,0 +1 @@ +#include "MSPd.h" #define OBJECT_NAME "quadpan~" /* Front *out1 *out3 *out2 *out4 Back */ static t_class *quadpan_class; typedef struct _quadpan { t_object x_obj; t_float x_f; // short bypass; // float pi_over_two; // float twopi; float *in; float *Xin; float *Yin; } t_quadpan; void *quadpan_new(t_symbol *s, int argc, t_atom *argv); t_int *offset_perform(t_int *w); t_int *quadpan_perform(t_int *w); void quadpan_dsp(t_quadpan *x, t_signal **sp); void quadpan_showstate( t_quadpan *x ); void quadpan_free(t_quadpan *x); void quadpan_tilde_setup(void) { quadpan_class = class_new(gensym("quadpan~"), (t_newmethod)quadpan_new, (t_method)quadpan_free,sizeof(t_quadpan),0,A_GIMME,0); CLASS_MAINSIGNALIN(quadpan_class, t_quadpan, x_f); class_addmethod(quadpan_class, (t_method)quadpan_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *quadpan_new(t_symbol *s, int argc, t_atom *argv) { int i; t_quadpan *x = (t_quadpan *)pd_new(quadpan_class); for(i = 0; i < 2; i++){ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i = 0; i < 4; i++){ outlet_new(&x->x_obj, gensym("signal")); } x->in = (float *) malloc(8192 * sizeof(float)); x->Xin = (float *) malloc(8192 * sizeof(float)); x->Yin = (float *) malloc(8192 * sizeof(float)); // x->pi_over_two = 1.5707963267948965; // x->twopi = 6.283185307179586; return x; } void quadpan_free(t_quadpan *x) { free(x->in); free(x->Xin); free(x->Yin); } t_int *quadpan_perform(t_int *w) { float gain1, gain2, gain3, gain4; float xval, yval; float xsquared, ysquared, ix, iy, ixsquared, iysquared; int i; t_quadpan *x = (t_quadpan *) (w[1]); float *in = x->in; float *Xin = x->Xin; float *Yin = x->Yin; float *in_loc = (t_float *)(w[2]); float *Xin_loc = (t_float *)(w[3]); float *Yin_loc = (t_float *)(w[4]); float *out1 = (t_float *)(w[5]); float *out2 = (t_float *)(w[6]); float *out3 = (t_float *)(w[7]); float *out4 = (t_float *)(w[8]); int n = (int)(w[9]); // copy buffers to avoid writeovers in shared memory for(i = 0; i < n; i++){ in[i] = in_loc[i]; Xin[i] = Xin_loc[i]; Yin[i] = Yin_loc[i]; } while( n-- ){ xval = *Xin++; yval = *Yin++; if( xval < 0.0 ) xval = 0.0; if( yval > 1.0 ) yval = 1.0; if( yval < 0.0 ) yval = 0.0; if( yval > 1.0 ) yval = 1.0; xsquared = xval * xval; ysquared = yval * yval; ix = 1.0 - xval; iy = 1.0 - yval; ixsquared = ix * ix; iysquared = iy * iy; gain1 = sqrt( xsquared + ysquared ); if( gain1 > 1.0 ) gain1 = 1.0; gain1 = 1.0 - gain1; /* Left Rear Gain */ gain2 = sqrt( ixsquared + ysquared ); if( gain2 > 1.0 ) gain2 = 1.0; gain2 = 1.0 - gain2; /* Right Rear Gain */ gain3 = sqrt( xsquared + iysquared ); if( gain3 > 1.0 ) gain3 = 1.0; gain3 = 1.0 - gain3; /* Left Front Gain */ gain4 = sqrt( ixsquared + iysquared ) ; if( gain4 > 1.0 ) gain4 = 1.0; gain4 = 1.0 - gain4; /* Right Front Gain*/ *out1++ = *in * gain3; *out2++ = *in * gain4; *out3++ = *in * gain2; *out4++ = *in++ * gain1; } return (w+10); } void quadpan_dsp(t_quadpan *x, t_signal **sp) { if( ! sp[0]->s_sr ){ return; } dsp_add(quadpan_perform, 9, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, sp[5]->s_vec, sp[6]->s_vec, sp[0]->s_n); } \ No newline at end of file diff --git a/externals/lyonpotpourri/rotapan~-help.pd b/externals/lyonpotpourri/rotapan~-help.pd new file mode 100755 index 000000000..b026bd9e0 --- /dev/null +++ b/externals/lyonpotpourri/rotapan~-help.pd @@ -0,0 +1,37 @@ +#N canvas 606 234 406 508 10; +#X obj 31 269 rotapan~ 5; +#X obj 31 373 shoehorn~ 5 2; +#X obj 31 414 *~ 0.01; +#X obj 106 415 *~ 0.01; +#X obj 31 97 osc~ 400; +#X obj 65 120 osc~ 500; +#X obj 120 228 phasor~ 0.08; +#X obj 31 463 dac~; +#X obj 110 164 osc~ 430; +#X obj 129 187 osc~ 479; +#X obj 95 142 osc~ 300; +#X text 22 34 rotapan~ rotates an array of channels preserving spatial +relations. The rightmost inlet controls the phase of the rotation \, +in the range (0-1). The argument determines the length of the channel +array.; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 148 374 hsl 128 15 0 0.15 0 0 empty empty gain -2 -8 0 10 -232576 +-1 -1 0 1; +#X connect 0 0 1 0; +#X connect 0 1 1 1; +#X connect 0 2 1 2; +#X connect 0 3 1 3; +#X connect 0 4 1 4; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 2 0 7 0; +#X connect 3 0 7 1; +#X connect 4 0 0 0; +#X connect 5 0 0 1; +#X connect 6 0 0 5; +#X connect 8 0 0 3; +#X connect 9 0 0 4; +#X connect 10 0 0 2; +#X connect 13 0 3 1; +#X connect 13 0 2 1; diff --git a/externals/lyonpotpourri/rotapan~.c b/externals/lyonpotpourri/rotapan~.c new file mode 100755 index 000000000..2c46a1e99 --- /dev/null +++ b/externals/lyonpotpourri/rotapan~.c @@ -0,0 +1,147 @@ +#include "MSPd.h" + +static t_class *rotapan_class; + +#define OBJECT_NAME "rotapan~" + +/* Pd version of rotapan~ */ + +typedef struct _rotapan + { + t_object x_obj; + t_float x_f; + t_double sr; + long rchans; + double pio2; + t_float *inarr; + t_float **ins; // array of input signal vectors + t_float **outs; // array of output signal vectors + } t_rotapan; + + +void *rotapan_new(t_symbol *s, int argc, t_atom *argv); + + +void rotapan_free(t_rotapan *x); +void rotapan_assist(t_rotapan *x, void *b, long msg, long arg, char *dst); +void rotapan_version(t_rotapan *x); +void rotapan_dsp(t_rotapan *x, t_signal **sp); +t_int *rotapan_perform(t_int *w); + +void rotapan_tilde_setup(void){ + rotapan_class = class_new(gensym("rotapan~"), (t_newmethod)rotapan_new, + (t_method)rotapan_free, sizeof(t_rotapan),0,A_GIMME,0); + CLASS_MAINSIGNALIN(rotapan_class, t_rotapan, x_f); + class_addmethod(rotapan_class, (t_method)rotapan_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *rotapan_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + + t_rotapan *x = (t_rotapan *)pd_new(rotapan_class); + x->rchans = (long) atom_getfloatarg(0,argc,argv); + /* allocate in chans plus 1 for controlling the pan */ + for(i = 0; i < x->rchans; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); + } + for(i=0; i < x->rchans; i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + x->pio2 = PI / 2.0; + x->inarr = (t_float *) malloc((x->rchans + 1) * sizeof(t_float)); + // for better compatibility with Max 6 + x->ins = (t_float **) malloc((x->rchans + 1) * sizeof(t_float *)); + x->outs = (t_float **) malloc(x->rchans * sizeof(t_float *)); + for(i = 0; i < x->rchans + 1; i++){ + x->ins[i] = (t_float *) malloc(8192 * sizeof(t_float)); + } + return x; +} + + + +void rotapan_free(t_rotapan *x) +{ + int i; + for(i = 0; i < x->rchans + 1; i++){ + free(x->ins[i]); + } + free(x->ins); + free(x->outs); + free(x->inarr); +} + +// try copying all vectors first!!! + +t_int *rotapan_perform(t_int *w) +{ + t_rotapan *x = (t_rotapan*) w[1]; + t_float *invec; + long rchans = x->rchans; + t_double pio2 = x->pio2; + t_float *inarr = x->inarr; + t_float **ins = x->ins; + t_float **outs = x->outs; + double amp1, amp2; + double panloc; + double scaledIndex; + int chan,i,j; + int offset; + + int n = (int) w[(rchans * 2) + 3]; + + // copy input vectors + for(i = 0; i < rchans + 1; i++){ + invec = (t_float *) w[2 + i]; + for(j = 0; j < n; j++){ + ins[i][j] = invec[j]; + } + } + + // assign output vector pointers + for(i = 0; i < rchans; i++){ + outs[i] = (t_float *) w[3 + rchans + i]; + } + + for( j = 0; j < n; j++){ + for(chan = 0; chan < rchans; chan++){ + inarr[chan] = ins[chan][j]; + outs[chan][j] = 0; + } + scaledIndex = ins[rchans][j] * (double) rchans; + if(scaledIndex < 0.0 || scaledIndex > rchans) + scaledIndex = 0.0; + + offset = (int) floor(scaledIndex) % rchans; + panloc = (scaledIndex - offset) * pio2; + + amp1 = cos( panloc ); + amp2 = sin( panloc ); + + for(chan = 0; chan < rchans; chan++){ + outs[(chan+offset)%rchans][j] += amp1 * inarr[chan]; + outs[(chan+offset+1)%rchans][j] += amp2 * inarr[chan]; + } + } + return (w + (rchans * 2) + 4); +} + +void rotapan_dsp(t_rotapan *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count = (x->rchans * 2) + 3; // input/output chans + object + panner + vectorsize + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + dsp_addv(rotapan_perform, pointer_count, (t_int *)sigvec); + free(sigvec); +} diff --git a/externals/lyonpotpourri/rtrig~-help.pd b/externals/lyonpotpourri/rtrig~-help.pd new file mode 100755 index 000000000..af4b99478 --- /dev/null +++ b/externals/lyonpotpourri/rtrig~-help.pd @@ -0,0 +1,1268 @@ +#N canvas 32 219 471 332 10; +#X floatatom 42 100 10 0 0 0 - rtrig-odds -, f 10; +#X msg 42 125 odds \$1; +#N canvas 0 22 466 316 initialize-odds 0; +#X msg 83 104 44100; +#X floatatom 62 161 5 0 0 0 - - -, f 5; +#X obj 82 137 t b f; +#X obj 62 185 / 44100; +#X obj 33 68 t b b; +#X msg 22 101 3; +#X obj 34 23 loadbang; +#X obj 85 236 s rtrig-odds; +#X connect 0 0 2 0; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 2 1 3 1; +#X connect 3 0 7 0; +#X connect 4 0 0 0; +#X connect 4 1 5 0; +#X connect 5 0 1 0; +#X connect 6 0 4 0; +#X restore 210 293 pd initialize-odds; +#N canvas 0 22 450 300 (subpatch) 0; +#X array rtrig_buffa 8000 float 3; +#A 0 -0.835742 0.295418 -0.477275 0.664057 0.0894576 0.126525 -0.570681 +-0.769957 0.328894 0.887324 -0.987493 -0.0918505 -0.167639 0.30611 +0.247932 0.985064 0.511729 -0.00734649 0.834626 -0.250302 0.602716 +-0.245854 0.251351 0.959939 0.462986 0.376727 -0.676458 0.0291857 -0.0850926 +0.94899 -0.698311 0.411686 -0.93346 0.647462 0.45746 -0.202548 0.599162 +-0.972271 0.203824 0.525393 -0.243858 0.728809 0.555214 0.762019 -0.56623 +-0.936332 -0.650677 -0.0315117 -0.817959 -0.607699 0.624249 0.888495 +-0.538406 -0.21957 -0.971602 0.299982 -0.481549 -0.363419 0.919384 +-0.177656 0.633112 0.961006 0.0322292 -0.397558 -0.86288 0.359295 -0.498907 +0.313094 0.347302 -0.931515 0.2274 -0.194406 0.901002 -0.183211 0.492452 +-0.0555201 -0.223885 0.339124 0.881303 0.347028 -0.931989 0.935646 +-0.960249 0.374315 0.427719 0.886643 -0.610111 -0.340919 -0.861892 +-0.77309 -0.771005 -0.89265 0.784726 -0.176239 -0.59436 0.452907 0.901254 +-0.33951 -0.896446 0.560837 0.657857 0.6397 -0.251398 -0.375343 0.925152 +0.767889 0.776224 0.228304 -0.265735 -0.770307 0.674781 -0.709107 0.688673 +-0.0179935 -0.559029 -0.453848 -0.0498401 0.619035 0.534469 0.538508 +-0.605998 0.752198 -0.898959 -0.358198 0.253901 -0.560671 0.0542763 +-0.801537 0.137144 0.653029 -0.310072 0.868368 0.895979 0.344743 0.88309 +0.51009 0.911849 0.412433 -0.50774 0.473596 0.123357 0.488988 0.422602 +-0.247433 0.786962 -0.355936 -0.61795 -0.333146 0.288632 0.401489 -0.161195 +0.619629 0.353057 0.129873 -0.48553 -0.643962 0.793926 -0.260973 0.738193 +-0.271011 0.300902 -0.255625 -0.196899 -0.310884 0.463357 0.545739 +0.0642049 -0.746434 0.0312008 -0.534848 0.386727 -0.394044 -0.136592 +-0.639938 -0.125413 0.822458 -0.0163202 -0.831933 0.243304 0.0835845 +-0.109819 -0.263907 0.350414 -0.443453 0.239869 0.861429 -0.49394 -0.0297523 +0.387729 0.657026 0.288703 0.213668 -0.843178 0.870313 -0.100632 -0.776229 +0.624257 -0.184434 -0.590113 0.133038 -0.673835 0.42339 -0.301372 0.256905 +-0.242029 0.461011 0.614018 -0.175316 0.682158 -0.340017 -0.306358 +0.180674 -0.893927 -0.0329915 -0.496265 0.64704 -0.80673 0.816391 -0.0227405 +-0.511206 0.749586 0.324426 -0.588578 0.731633 0.0103903 0.526134 0.408683 +-0.256027 0.769024 0.409292 -0.88282 -0.0139037 -0.220843 0.249845 +-0.728362 -0.478801 0.563889 -0.822624 0.547458 -0.38642 -0.225291 +0.371196 -0.884515 -0.62141 0.0543785 0.573484 0.238404 -0.141481 -0.871272 +-0.228759 -0.00496008 -0.405321 -0.0663771 0.540572 0.549933 -0.419932 +0.642915 0.739506 -0.0393885 -0.269934 0.323352 -0.867807 -0.628863 +-0.623337 0.543939 -0.376835 0.842055 -0.0336764 -0.540341 -0.00541768 +-0.530913 -0.651437 -0.373879 0.596194 -0.188957 0.654246 -0.552156 +-0.6946 0.0461859 0.425136 0.0923067 -0.727232 0.436202 0.118093 -0.384571 +-0.505481 0.747758 0.410103 0.714996 -0.0788929 0.76251 -0.500903 0.493941 +-0.0383628 0.345127 0.580724 0.823013 -0.816762 0.816806 0.526632 0.751311 +0.176557 0.663496 -0.0243367 0.725419 -0.328631 -0.465656 -0.12947 +-0.606257 -0.755194 0.0302401 0.197236 0.395497 0.77666 0.397157 -0.829292 +-0.354888 0.661359 0.673057 -0.241324 -0.0920525 0.0217313 -0.275228 +-0.650033 0.695618 -0.239013 0.482461 0.584513 -0.133738 -0.467729 +-0.753606 0.198563 -0.0801162 0.574328 0.370515 0.672695 0.109728 0.393439 +-0.409602 -0.0315059 0.167785 -0.121698 -0.476875 0.562172 0.153844 +0.540081 0.730521 0.0823469 -0.119007 0.508604 -0.744002 -0.536503 +-0.379099 -0.517365 0.726126 -0.436086 0.377468 0.660092 0.0119243 +-0.062981 0.352068 -0.45459 -0.439821 -0.272285 -0.532898 0.301422 +0.112311 0.665597 0.0473227 0.340226 -0.476158 0.350259 0.346503 0.721466 +-0.422589 -0.533556 -0.522983 0.0757775 0.561406 -0.719939 0.189364 +0.736802 0.512699 -0.419168 -0.50214 0.180212 0.732151 0.405037 0.690649 +-0.342393 0.817066 0.822425 -0.19811 -0.170585 -0.00960906 -0.183966 +0.0843094 0.186337 -0.339525 -0.772934 -0.646612 0.550507 0.564046 +0.452695 0.247418 -0.33724 -0.471828 -0.0587427 0.121892 0.80766 0.718705 +0.00680929 0.444281 -0.352458 -0.0231827 0.162945 -0.796439 0.586364 +0.179311 0.476521 -0.569629 0.503339 -0.257618 0.370019 0.806299 -0.684801 +0.51225 -0.514917 0.783005 -0.628046 0.436044 0.579696 0.182305 0.36794 +0.60085 -0.253543 0.16974 -0.390853 0.379326 -0.0498748 0.483581 -0.807632 +0.355495 0.434666 0.527345 0.516842 -0.058084 -0.364105 0.0444323 -0.735993 +-0.520848 0.0848005 -0.619585 0.251174 0.29002 0.72976 -0.661572 0.227479 +-0.511462 -0.571849 0.633173 0.276035 0.552367 0.641434 -0.269253 0.784109 +-0.741408 -0.658231 0.394871 0.0828319 -0.135257 0.785654 0.655901 +-0.0883092 0.277407 0.445409 0.327473 0.0265041 -0.632168 -0.283796 +0.0538263 -0.347673 0.614191 -0.481112 -0.0303797 -0.682108 -0.617428 +0.739628 -0.431869 -0.113293 0.149238 0.296776 0.349126 0.409234 -0.177757 +0.331158 0.117851 -0.436817 -0.647831 0.28219 -0.394438 0.633584 0.595235 +0.503814 0.727404 -0.523504 -0.335233 -0.0714134 -0.259293 -0.217885 +0.424861 0.443948 0.528297 0.267977 0.733394 0.620765 0.659832 -0.335029 +0.399491 -0.692404 0.714901 0.471658 -0.729963 -0.42572 0.602705 0.556965 +-0.36731 0.513438 0.214491 -0.716247 0.408588 0.430966 -0.320824 -0.718305 +0.356686 0.388347 -0.772503 -0.731744 -0.699603 0.333012 0.220973 -0.257542 +0.502044 0.306945 -0.410018 -0.283928 0.251241 0.481999 -0.600003 0.0456756 +0.340463 0.0377561 0.501463 -0.594775 -0.015507 -0.483183 0.485574 +-0.0807038 -0.250886 0.463413 0.495773 -0.702418 0.44709 -0.685287 +-0.687092 0.298555 0.132605 0.114882 -0.63336 0.585037 -0.080348 -0.0366592 +0.078957 -0.131559 0.19811 -0.589798 0.0484538 -0.265803 -0.441673 +-0.585173 0.350033 -0.711773 -0.573298 0.238271 -0.173883 0.337647 +0.684968 0.727698 0.659831 -0.739789 -0.049479 -0.49972 -0.104304 0.506399 +0.629377 -0.489331 0.301648 0.151661 -0.660537 -0.62112 -0.359871 0.127436 +0.707046 0.235909 0.734927 0.12304 0.0763171 -0.645178 0.0402257 0.454439 +0.52093 0.710564 -0.072247 -0.713049 -0.63649 0.371238 -0.46628 0.720145 +-0.139022 -0.70529 0.25552 -0.702439 0.029119 -0.0352826 0.391516 -0.708384 +0.55949 0.465008 -0.127794 -0.0208143 0.398531 -0.621433 0.116855 0.72709 +-0.585166 -0.481018 0.562012 0.471237 0.6655 0.165751 -0.707516 0.523411 +0.462807 0.0830106 0.666693 0.3467 0.278718 -0.601018 0.417231 -0.370105 +0.505445 0.361488 -0.07527 0.70442 -0.210057 -0.34542 -0.557546 -0.418198 +-0.134056 0.192986 -0.190269 -0.611525 -0.2634 -0.222219 -0.598422 +0.665082 -0.231841 0.654043 -0.509599 -0.576013 -0.449476 0.410317 +0.45798 0.124308 -0.222888 -0.683149 0.591303 -0.148623 -0.608435 0.695386 +0.323044 0.545027 -0.360188 0.0783212 0.27972 -0.223151 0.494273 -0.610568 +0.434615 -0.703194 -0.358026 -0.286511 0.350378 -0.549627 -0.246215 +0.260122 0.496291 -0.235503 -0.479008 0.567751 0.323822 -0.115039 0.196336 +0.175999 0.300174 -0.570021 0.263679 0.0880464 0.704413 -0.370217 -0.198681 +0.294029 0.0815164 -0.395507 0.165862 0.525991 0.471599 0.15045 0.482413 +-0.0613482 -0.554782 -0.677325 -0.505148 -0.0165601 0.297918 -0.247105 +-0.128779 0.528402 0.559834 0.687403 -0.608829 0.612915 0.0459864 0.345713 +0.213191 -0.454221 0.00844385 0.0109279 -0.611085 -0.251864 0.541453 +-0.00680817 0.20224 0.0888158 0.472351 0.197968 0.600626 -0.545826 +-0.296135 -0.361889 -0.403542 0.62498 -0.21801 0.490471 0.45164 0.504504 +-0.0748931 -0.0910913 -0.454578 0.304081 -0.289184 0.365134 0.0521821 +0.669388 -0.00531549 -0.609455 0.134414 -0.014946 -0.686835 0.567918 +0.316421 -0.034298 -0.333065 -0.149974 -0.631012 0.475446 -0.535029 +-0.0158695 -0.447376 0.267874 -0.0135686 0.320405 0.442661 -0.563091 +0.421266 -0.54511 -0.646913 -0.564367 -0.511526 -0.444568 -0.361846 +-0.6733 -0.568254 0.0271765 -0.601813 0.624402 0.0579314 -0.207928 +0.460577 0.13731 -0.673844 -0.118013 0.560369 -0.41876 0.396223 -0.462294 +0.234038 0.464818 0.591199 -0.516332 -0.209218 -0.624572 0.491284 0.0815168 +0.044928 -0.0939441 0.402145 -0.156087 -0.00193751 0.457005 0.579195 +-0.297386 -0.392002 0.0500696 -0.235417 -0.520099 -0.504788 0.372377 +0.13047 0.115681 0.316857 0.0735848 -0.253244 -0.504774 0.47214 0.188744 +-0.460137 -0.626947 0.191956 0.467457 0.475433 0.521683 -0.0967438 +0.0854922 0.441389 -0.394306 -0.387262 0.0130479 0.156095 -0.265696 +0.625665 0.368947 -0.628428 -0.0312153 0.27487 -0.534798 -0.578554 +-0.132449 -0.370106 -0.18532 0.113568 0.338905 0.205818 -0.139103 0.292232 +-0.466877 0.381875 0.643627 -0.617752 -0.347127 -0.565264 -0.447765 +-0.0991089 -0.45228 -0.11953 0.243897 0.421926 -0.465014 0.280245 0.486581 +0.088119 -0.0574674 -0.415159 0.0977275 0.127468 -0.00414757 -0.206007 +-0.0248921 -0.194346 -0.347053 0.436773 0.162224 -0.085168 0.440861 +0.598579 -0.437637 -0.602206 0.112534 0.599072 -0.126888 -0.530007 +-0.641592 -0.560737 -0.562271 -0.397322 -0.295041 -0.286294 0.416746 +-0.310183 0.47051 0.528005 -0.57018 0.577526 -0.054944 0.48164 0.511956 +0.406457 -0.55139 0.293391 -0.0229246 -0.336202 -0.0374929 -0.0554736 +-0.0152052 -0.551992 0.402195 -0.623831 0.516455 -0.565019 0.0641088 +0.136063 -0.572871 -0.622318 0.0863632 0.313693 0.459188 0.269234 0.119192 +-0.604932 -0.136763 0.0913802 0.433635 0.202212 0.142965 -0.557436 +0.519055 0.357822 -0.107945 0.453436 0.543711 -0.0272039 0.497259 0.348116 +0.588512 0.0931868 0.465119 -0.106892 0.205048 -0.407759 0.199801 0.10876 +-0.449567 0.581581 -0.498432 -0.0377746 -0.432671 -0.350054 0.422076 +0.0385665 -0.0291709 0.168769 0.392004 -0.395741 0.0711381 0.408597 +-0.525884 -0.367884 -0.102081 0.182327 0.365597 0.498273 0.377647 -0.365565 +0.0100336 -0.60319 0.0940302 0.216856 0.229052 -0.12576 -0.167006 0.389126 +-0.035366 -0.0957428 -0.0386752 -0.285765 0.278915 -0.444399 0.614114 +0.128978 -0.261654; +#A 1000 -0.367433 -0.275242 -0.494542 0.00431681 0.0247323 -0.0105089 +-0.274871 0.61231 0.224424 0.108666 -0.363012 0.24762 -0.468279 -0.0948115 +0.0297219 -0.466191 -0.604472 -0.421738 -0.308083 0.431317 0.542731 +0.489894 -0.255843 -0.14041 -0.161539 0.163833 0.319203 -0.501539 0.241121 +-0.211488 -0.593707 0.0076551 -0.272384 -0.183472 -0.117746 0.460573 +-0.595302 -0.452789 0.446612 0.502246 0.355556 -0.571297 -0.369663 +0.371721 0.224178 0.0209524 -0.545654 0.0221634 0.359498 0.070479 0.337225 +-0.248012 0.576219 -0.295738 0.559389 -0.0700473 -0.333728 0.294 0.218175 +-0.172732 0.383528 -0.155221 0.062428 0.340428 -0.236089 -0.5382 0.0437288 +-0.163413 -0.508837 0.522399 -0.034779 -0.150689 0.404752 -0.19332 +-0.174052 0.332519 0.333605 0.377217 -0.134947 0.000228848 -0.0633218 +0.169028 0.310182 0.498309 -0.0821215 -0.118023 -0.344128 0.217763 +0.335757 0.479297 -0.274292 0.233225 -0.37188 -0.163501 -0.184397 -0.0960866 +0.38999 0.270889 -0.0135504 -0.154792 -0.422041 -0.100883 0.517478 +0.482862 -0.440394 -0.436418 -0.0914329 -0.249056 0.0930156 -0.516369 +-0.400413 0.41524 0.579206 -0.274995 0.210603 0.183352 -0.323886 -0.206244 +-0.142845 -0.396456 0.416858 -0.318263 0.293502 -0.249623 -0.0445082 +0.0329547 -0.00507005 0.227516 -0.094368 0.291225 -0.292363 -0.214395 +0.154849 -0.541658 -0.403338 -0.482903 0.506149 0.572239 -0.416546 +0.566058 -0.278873 0.528777 0.53763 -0.135283 0.00586314 -0.257098 +-0.542307 -0.0928621 -0.253854 -0.569594 0.38338 0.459174 -0.288573 +0.34601 -0.134484 -0.249679 -0.192104 -0.449886 -0.426976 0.471713 +0.12383 -0.0358312 0.337693 0.1343 0.547612 -0.265108 0.511812 -0.096223 +0.108317 0.0683641 -0.296455 0.0799446 0.549392 -0.26494 -0.0668157 +0.413318 -0.541842 0.0376601 -0.244326 -0.424026 0.0293535 -0.0948211 +0.504502 0.519598 0.274755 0.27989 -0.124142 0.397101 -0.0362575 -0.204294 +-0.177781 -0.148448 0.509071 -0.296815 -0.408951 0.22306 0.126114 0.115586 +-0.313965 -0.0422686 -0.123403 -0.0918809 -0.0434048 0.205762 0.497157 +0.216819 -0.352018 -0.434552 0.0969264 0.435664 0.487445 0.206018 0.433077 +0.0522922 -0.461244 -0.128747 -0.376982 -0.364537 -0.534637 -0.355191 +0.051794 -0.111232 -0.26376 -0.171768 -0.535732 -0.1053 -0.286618 0.522006 +0.490407 0.0269577 0.334498 0.288256 0.131309 -0.35567 0.0504357 -0.538349 +-0.200592 0.528612 0.333771 0.42801 -0.255544 -0.311824 -0.0103947 +-0.510054 -0.21405 -0.133371 0.101145 -0.320838 -0.234215 -0.362298 +-0.00609061 -0.0941244 -0.274805 0.0855003 0.532705 -0.390074 -0.189968 +-0.17807 -0.427541 0.394226 -0.0915744 0.0087277 0.0882959 0.390637 +0.0978042 -0.0682682 -0.287665 -0.321582 -0.252169 0.390103 0.45845 +-0.51312 -0.426996 -0.165765 -0.0878426 -0.458708 0.194024 0.409689 +0.372037 -0.0333962 0.451497 0.366627 -0.457975 0.245902 -0.277681 +-0.435963 0.166079 -0.48291 -0.0583709 -0.125538 0.227343 0.303136 +-0.064972 -0.491479 -0.0962057 -0.206229 0.107734 0.326645 -0.257916 +0.458317 0.49532 -0.459684 -0.356774 -0.232013 -0.372925 -0.372314 +-0.302658 0.235733 0.478405 -0.470904 -0.300925 -0.292057 0.398182 +-0.195054 0.497424 -0.208164 -0.311334 -0.355826 -0.144643 -0.151203 +0.443159 0.415945 -0.455035 -0.358111 -0.0568893 0.0884788 -0.363805 +0.133959 0.470788 0.414416 -0.149819 0.393441 0.113702 -0.194813 -0.396641 +-0.0369495 -0.052249 -0.0308795 -0.144171 0.425029 -0.461673 0.365892 +-0.466819 0.00353357 0.466091 0.181119 -0.0473516 -0.217339 0.31901 +-0.493251 -0.285854 -0.140661 -0.187819 -0.261082 -0.373948 -0.111184 +0.368464 0.142652 0.170717 -0.121921 0.456237 -0.191502 -0.233861 0.205927 +-0.144203 -0.1619 -0.0928985 -0.134012 -0.441922 -0.330149 -0.150014 +0.0512567 0.398885 -0.222977 0.216484 -0.142294 0.447771 -0.465575 +0.242806 0.365434 0.244199 0.402724 -0.151852 -0.14024 -0.333509 0.273799 +0.420283 0.413328 -0.39063 0.179519 0.326531 -0.399391 0.384413 0.151763 +0.238433 -0.429873 -0.108666 0.380411 0.15069 0.282908 -0.457724 -0.38476 +0.174552 0.0572583 -0.0910657 -0.195095 0.0783487 0.329131 0.149767 +0.006806 -0.422064 -0.306607 0.169531 -0.463747 0.355426 0.140381 -0.462418 +0.333689 -0.0960503 -0.360754 0.119676 -0.312339 -0.0121017 -0.162273 +-0.430013 0.0237817 -0.00227968 0.148671 0.378073 0.15942 -0.0425293 +0.00365751 -0.0688015 -0.34862 0.311434 0.343505 0.0208228 0.399145 +-0.484528 0.451569 0.368019 -0.306757 0.189017 -0.0569441 -0.220609 +0.141537 0.35402 -0.0006415 -0.0401325 0.287822 0.0738417 -0.0212225 +0.308195 0.128946 0.0163164 0.120673 0.277234 0.034024 -0.206095 -0.372988 +-0.468244 -0.0811246 -0.0588176 -0.171899 -0.210384 -0.365513 -0.222266 +-0.14499 -0.328541 -0.409464 -0.141213 0.283887 -0.0739413 -0.306423 +0.322907 0.270656 -0.263126 0.450735 -0.0218741 -0.261802 0.475905 +-0.473354 -0.0700584 -0.133136 -0.355867 0.00855277 0.262923 0.012141 +-0.137954 -0.199379 0.326304 -0.355264 0.433404 0.352456 -0.273565 +-0.444891 0.139199 0.376416 0.0151982 0.443985 -0.240998 0.264514 0.461 +-0.118386 -0.387363 0.0910616 0.228133 -0.11079 -0.280568 -0.244386 +0.292792 -0.361689 -0.279105 0.295952 0.414509 -0.281819 0.442386 -0.195142 +-0.346505 0.0396845 -0.402754 -0.0985328 0.379534 -0.135418 0.360593 +0.242732 -0.105493 -0.0723099 0.0717686 -0.155488 -0.420064 0.121793 +0.192059 -0.455617 -0.208639 0.223255 0.162779 0.037244 0.136878 -0.0850288 +0.349981 0.167607 0.444043 -0.0383285 0.11186 0.0802951 -0.357286 -0.0806454 +0.259644 -0.0360423 -0.055709 -0.223303 -0.248628 -0.0425518 -0.26166 +-0.0282449 0.440017 0.28618 0.0718392 -0.191033 -0.344718 -0.200991 +-0.134885 -0.227084 -0.0267616 0.217874 0.0678331 0.399215 0.440716 +-0.348663 0.26552 -0.428508 0.392761 0.0243112 -0.36356 0.0455636 0.27707 +0.157334 0.382869 -0.0740053 0.43482 -0.00214982 0.0627078 -0.271819 +-0.327664 -0.384596 0.00444482 -0.326818 -0.0775521 0.23256 -0.0896605 +-0.0635293 -0.148796 0.0851521 0.374422 0.2215 -0.0345469 0.404843 +-0.222723 -0.437568 0.282256 -0.0619798 -0.0772161 -0.0800227 -0.410801 +-0.439997 -0.197767 0.163016 -0.17148 -0.0611159 -0.119884 0.119299 +0.439572 0.33912 -0.103626 0.364075 -0.361341 0.3171 0.0145265 -0.419276 +-0.121783 -0.151006 -0.0310109 0.114667 -0.209216 -0.322913 -0.235401 +-0.40658 0.0924605 0.113212 0.147169 0.438308 0.412988 0.0774338 0.21899 +0.195107 0.327054 -0.131339 0.115037 -0.305849 0.153441 -0.249048 -0.0652134 +-0.0182817 -0.217721 -0.352367 0.211939 0.380106 -0.0904079 -0.0739979 +0.423267 0.263662 -0.432514 -0.213369 -0.0989565 0.16136 0.397206 0.217036 +0.246652 -0.396639 0.282959 0.214799 -0.269673 0.386277 -0.215938 0.167963 +-0.396283 -0.315497 -0.333759 0.248123 -0.194862 -0.219814 -0.03245 +-0.103017 -0.349431 -0.111254 -0.281066 0.100527 0.0117867 0.272746 +-0.128362 -0.129661 0.132829 -0.307941 0.00660918 -0.200856 0.235275 +-0.0927469 -0.0226129 -0.167796 -0.370535 0.148211 -0.377942 -0.175602 +-0.276206 0.338425 -0.0396304 0.301293 0.0180009 0.261997 -0.0591971 +0.0446929 -0.155237 -0.204242 -0.237984 -0.183541 -0.122579 0.189739 +-0.26438 0.360301 0.0482359 -0.334967 -0.206607 -0.198226 -0.201065 +0.16676 -0.37113 -0.342875 -0.209142 0.0310099 0.298324 0.120238 0.0470919 +0.297156 -0.240169 -0.215206 0.408261 0.330327 -0.097586 -0.268137 +-0.0556848 0.349251 0.00282997 0.30927 0.309262 -0.0128703 -0.00612628 +-0.184591 -0.248113 0.382744 0.179613 0.00817505 0.195997 -0.144197 +-0.0751613 0.219514 0.0317123 -0.28574 0.266036 -0.0310973 -0.0661612 +0.342639 -0.277836 0.107258 0.20614 0.00382019 -0.224966 0.0614965 +-0.408289 0.394971 0.276286 0.215131 -0.397132 0.109002 -0.40052 0.390415 +-0.359158 -0.230041 0.27466 0.178274 0.0948681 0.00116634 -0.248427 +0.27649 0.338282 -0.376667 -0.31084 -0.0300047 -0.218511 -0.268928 +0.39139 -0.313863 0.321134 -0.140555 -0.0516427 -0.307018 -0.291352 +0.0298606 -0.385452 -0.181127 0.053446 -0.239011 0.097486 0.177064 +-0.000433934 -0.30665 0.0959365 -0.317159 0.387091 0.19832 0.243064 +0.371351 0.0748231 0.205311 -0.366705 -0.0768744 0.36651 0.216433 0.139159 +0.363253 -0.340081 -0.07106 0.171344 0.211102 -0.158153 0.0424928 0.183498 +0.365141 -0.234668 0.293459 0.0180548 -0.142257 -0.352378 0.0748415 +0.0258298 -0.271492 -0.290075 0.0295616 -0.381029 -0.0205016 0.207977 +-0.100546 0.347204 -0.101012 -0.297965 -0.273311 0.141041 0.137948 +0.18005 -0.326404 -0.0871252 0.277847 0.235149 0.0395204 -0.238603 +-0.264331 -0.203643 -0.0813457 -0.309769 -0.374069 -0.0502322 -0.0566436 +0.123142 0.147841 0.248827 -0.227233 -0.0982252 -0.254568 -0.273491 +-0.335766 0.283466 -0.136765 0.010351 -0.0925355 0.234273 -0.160938 +-0.245124 -0.309106 0.0330107 -0.274756 -0.314079 0.00381228 0.0424322 +0.202715 -0.259872 -0.18628 0.069997 -0.365253 -0.133553 0.108994 0.0705565 +-0.273852 -0.134493 -0.288914 -0.110644 -0.0990951 -0.199465 -0.320406 +0.335455 0.282634 0.213235 0.276555 0.268883 0.286708 -0.118949 -0.328117 +0.331795 -0.316752 0.201464 -0.364426 -0.336822 -0.16654 0.302646 0.0643729 +-0.0167951 -0.158792 0.28786 -0.229108 -0.309211 -0.313667 -0.243702 +-0.306722 -0.180656 -0.234998 -0.108153 0.275709 0.0259072 -0.12274 +0.120937 -0.183879 -0.340529 -0.0978198 -0.165505 -0.291105 0.113772 +-0.0929008 -0.0994556 0.164509 0.295482 -0.299901 0.271355 -0.129076 +0.099856 0.050496 -0.346137 0.270383 -0.0327291 -0.344542 0.155496 +-0.343207 0.261987 -0.316049 -0.0735887 0.0214508 -0.257683 -0.36021 +-0.352323 0.0680364 -0.273948 0.050504 -0.0290199 0.201088 -0.0193107 +0.19138 0.270749 0.335952 0.318403 -0.33531 0.143152 0.103387 -0.193895 +0.138447 -0.0235258 -0.0415646 0.15683 -0.00642759 -0.116454 0.282772 +0.20992 0.0739448 -0.0861439 -0.0420883 -0.30765 0.157526 0.08245 0.182733 +-0.133364 -0.0246687 0.218607 -0.209579 -0.320855 -0.322398 0.35486 +0.134056 -0.332112 -0.243868 0.215638 0.0652962 -0.0840778 -0.283003 +-0.0369627 -0.271987 -0.00461057 -0.19783 0.0413568 0.203738 0.157843 +0.0195133 0.135245 -0.212573; +#A 2000 0.200209 0.0734631 0.0928159 -0.292988 0.2947 0.18162 -0.0486224 +0.0396767 0.216987 -0.062405 -0.213681 0.0946136 -0.180953 0.184422 +0.090247 -0.32984 0.0228291 0.116746 -0.13639 -0.233402 0.116045 0.209376 +0.163891 -0.0382326 -0.188677 -0.317437 -0.261232 0.191135 -0.295033 +-0.238871 0.312057 -0.11146 0.161592 0.0986467 -0.208995 0.0948014 +0.0407823 0.288357 -0.0250742 0.159394 0.122286 0.140017 0.129958 0.19922 +0.0839394 0.125641 0.155163 0.24258 0.180648 -0.0777762 0.0850191 0.246365 +-0.0264099 -0.100617 0.114681 0.284826 0.339862 0.0118169 -0.232638 +0.221441 -0.19921 0.248252 0.324319 0.240422 0.301309 -0.121478 0.222187 +0.176571 -0.219922 0.289331 -0.118886 -0.294437 0.32212 -0.209111 0.178933 +0.0594453 -0.262483 0.197674 0.0996593 -0.210097 0.0171813 -0.0484113 +0.33269 0.222671 -0.0358214 -0.33749 -0.0942383 0.215121 -0.109529 +0.330561 0.100836 -0.0992404 0.0287395 -0.253757 0.0893601 -0.148973 +0.140383 -0.167216 -0.169799 -0.25304 0.299888 0.0102152 0.0863718 +-0.092021 0.166359 0.158904 0.275049 0.300602 0.0963948 -0.28523 0.172087 +-0.272496 0.0823892 0.262345 0.099517 -0.165058 -0.134409 0.309801 +0.283063 -0.0316093 0.204293 0.21318 0.0538177 0.18466 0.00250576 -0.0544187 +0.189842 -0.222168 -0.106343 -0.307607 -0.196389 -0.0696753 -0.297406 +-0.0539127 0.320251 -0.0609413 -0.291684 -0.199573 0.08094 0.193998 +-0.233949 0.00121626 -0.0501311 0.0616576 0.233605 0.255903 0.218478 +-0.136381 0.122158 -0.00800147 -0.0114827 -0.255058 0.29856 -0.0854143 +0.287666 0.0150338 0.0117555 -0.175524 -0.127498 -0.291856 -0.239653 +-0.146728 -0.0467028 -0.165863 0.0958069 -0.0884098 -0.310673 0.317856 +0.282399 -0.0525878 -0.0736862 -0.293273 0.019204 -0.279421 -0.317724 +0.157718 -0.30051 0.0174446 0.183465 -0.245442 -0.130558 0.184748 -0.230893 +-0.269816 -0.100168 0.3068 0.14368 -0.317063 -0.309782 -0.294259 -0.291738 +-0.0143223 -0.0754103 0.048723 0.10371 -0.103782 0.271576 -0.264943 +-0.109083 0.263659 -0.0276319 -0.149169 0.116271 0.0665562 0.147749 +0.148644 0.227626 0.0559344 0.27466 0.252752 0.152369 0.246294 0.184177 +-0.246614 -0.308383 0.0951599 0.00363405 -0.297969 0.258989 0.0806836 +-0.0559659 -0.111874 0.225087 0.306603 -0.0646075 0.0318277 0.0923795 +-0.0981586 -0.268282 -0.123288 0.0201577 0.29108 0.0952233 0.0526 -0.301416 +-0.0584485 0.112849 0.00126683 -0.0832985 -0.20591 -0.0706531 -0.228938 +0.271258 0.180262 0.221928 0.10046 -0.182533 -0.226745 -0.304964 0.208472 +0.000754345 0.200569 -0.220168 0.0375318 0.0816712 -0.2192 -0.0154953 +0.182909 -0.230553 0.259952 -0.161504 0.154741 -0.153478 0.26998 0.0513453 +-0.157198 0.213378 -0.0856444 -0.120973 -0.0966633 0.224547 0.0105354 +-0.198395 -0.118149 0.0729837 0.290852 -0.196454 0.118081 0.202891 +0.17986 -0.0721225 0.177271 -0.0174806 -0.290065 0.0745255 -0.154929 +-0.168351 -0.0243916 0.249136 0.256901 0.189068 0.156595 0.0642284 +-0.194196 -0.247858 0.0801667 -0.119518 -0.247126 0.117147 -0.069204 +0.00629999 -0.159399 0.147141 0.11182 -0.238538 0.0228745 -0.283409 +0.0771356 -0.0566473 -0.0391579 -0.278063 0.268495 -0.181168 -0.151863 +0.183665 0.0633193 -0.121778 0.19827 -0.0128894 -0.00344577 -0.277451 +0.0274723 -0.0133802 0.00842348 -0.0791821 -0.124454 0.0900195 0.19345 +0.201803 0.273694 -0.270986 -0.0593161 -0.149996 -0.200205 -0.082581 +0.129325 0.267734 0.253242 -0.0720151 0.233291 -0.156047 -0.227897 +0.221627 0.226295 0.281477 0.0193852 0.00892663 -0.273691 0.0391456 +0.192175 -0.128201 0.165189 -0.229504 -0.140561 0.193843 0.200563 0.102336 +0.185621 0.0424851 -0.09698 -0.125775 0.146362 -0.0854688 -0.102335 +-0.0463309 -0.231399 -0.248978 0.0922811 0.039514 0.0599057 0.242111 +0.266201 -0.0979566 0.25037 0.0117171 0.226489 -0.101533 -0.266627 +0.03791 0.102744 0.212804 0.118176 -0.0125826 0.215656 -0.0334058 0.0895978 +0.0783781 -0.0343111 0.127555 0.0102875 -0.0246137 0.236109 0.0828266 +-0.113185 -0.204268 -0.240917 0.26065 -0.264378 -0.153071 0.0278315 +0.121887 0.0825421 0.229201 0.276274 -0.0715817 -0.180164 -0.249047 +-0.125105 0.131866 -0.232858 0.25224 0.276273 0.0810688 0.245526 0.244941 +-0.0971761 -0.0832707 -0.0733448 0.0653995 0.246176 0.102141 -0.220758 +0.226546 -0.054626 -0.272391 -0.0282433 0.205286 0.0329339 0.171306 +0.236747 -0.157997 -0.0388805 -0.15742 -0.179038 0.0381513 -0.188084 +-0.251478 -0.253176 0.0475456 -0.105379 0.158924 -0.24756 0.0924737 +-0.0567246 -0.107556 -0.259675 0.0212133 0.0819598 -0.202242 0.260077 +0.00780536 -0.245202 0.123752 -0.110788 0.0311192 0.0315005 -0.0562755 +-0.233526 -0.235854 0.114524 0.205028 0.158546 -0.0634319 -0.0846447 +0.185626 -0.117343 -0.193117 0.0580969 -0.265026 0.133234 -0.136169 +-0.112354 -0.247143 -0.11897 0.105658 -0.113451 -0.123621 -0.0447416 +-0.197857 -0.0474364 -0.226956 -0.205807 -0.229976 -0.0535528 -0.245341 +0.177827 -0.261107 -0.163546 0.197595 -0.26165 -0.168897 -0.0280393 +-0.209458 0.0496961 -0.209237 -0.0881118 -0.0378347 -0.219661 0.185735 +0.0150017 0.230972 0.0276925 -0.190811 0.0082931 -0.252202 -0.191321 +-0.244875 -0.21279 0.243977 0.0583171 0.0358342 -0.185315 -0.00703214 +-0.0733836 -0.254737 0.0913277 0.143447 -0.0218662 0.189068 -0.21364 +-0.00290769 -0.197538 0.112431 0.0912156 -0.0544065 -0.0978668 0.119396 +-0.0297196 0.130008 0.0906917 0.235269 -0.214147 0.0161478 0.0888101 +-0.0660549 -0.112315 -0.10933 0.238853 0.0765751 -0.139129 0.17043 +-0.208353 0.117063 -0.0550542 0.0875908 -0.0861098 -0.211831 0.0237104 +-0.186028 0.195406 0.129471 -0.231986 -0.0995911 -0.119745 -0.16781 +-0.0890738 0.0947444 0.212143 0.0700198 0.108372 0.0628498 -0.16294 +0.0946244 -0.0320069 -0.026718 -0.0789739 -0.216737 0.18733 -0.0521794 +-0.180563 0.0248214 -0.193363 -0.105484 -0.0843865 -0.0133015 0.0996474 +0.213871 0.0657021 -0.235381 0.0880285 -0.110797 0.174899 -0.105456 +0.172242 -0.0733781 -0.100684 -0.240032 -0.0973065 0.201482 -0.0443407 +-0.155592 -0.150305 0.169108 0.0895078 -0.107437 0.12768 -0.0670655 +0.142149 -0.08015 0.0449655 0.194063 0.244388 0.10573 -0.163425 0.125315 +0.152969 0.0788152 0.0542501 0.0290168 0.179835 0.0378998 0.114797 +-0.0558295 -0.199985 -0.207163 -0.0974645 0.0929253 -0.20687 0.119756 +0.0165074 0.232307 0.124001 0.111752 0.204292 -0.140088 -0.0957599 +0.229428 -0.134416 0.220038 -0.122082 -0.0997085 0.108066 -0.0775698 +0.194433 -0.173509 0.145684 0.0787471 -0.230043 -0.163299 0.0801612 +0.172812 0.0702269 -0.0116277 -0.0519028 0.0636801 -0.084178 0.107996 +-0.148294 -0.0600114 -0.0247268 0.168201 0.205954 0.156607 0.208827 +0.0679073 0.209747 0.011258 -0.170288 -0.230386 0.229419 0.190623 0.207985 +-0.212651 0.0317362 -0.106794 -0.13473 0.142166 -0.0251642 -0.0288235 +-0.0337985 0.152869 -0.0406989 -0.168958 0.0333708 -0.0197622 -0.0885399 +-0.140533 -0.0989477 0.168748 -0.0897475 -0.0241031 -0.103746 0.150809 +-0.03587 -0.053442 0.206022 -0.0999474 -0.0928646 0.0403806 -0.0919412 +0.0577665 -0.126466 0.175648 -0.180812 0.0996705 -0.0405699 -0.114944 +-0.102486 0.0918843 0.00448387 0.00183077 0.00944839 0.0138147 -0.0505852 +0.0866179 -0.115519 -0.108612 -0.154609 -0.111818 0.0968398 -0.185756 +-0.02288 0.212193 -0.0387429 -0.160995 0.189006 0.0309686 0.112071 +-0.219272 -0.211714 -0.135507 0.177542 -0.201028 -0.177894 0.027844 +0.213909 -0.0401007 0.0230527 0.144766 -0.0210758 0.142618 -0.039296 +-0.0957271 0.124666 -0.165123 -0.161159 0.141317 -0.0982746 0.0572213 +0.050454 0.214058 -0.0768965 -0.209624 -0.0406298 0.213217 0.0969856 +-0.0863185 -0.0743621 -0.0857871 -0.075959 -0.131607 -0.138822 -0.148579 +-0.213226 0.0180573 0.13084 0.0543585 0.119827 -0.112457 -0.0977953 +0.0164791 -0.177642 -0.157413 0.0320012 -0.126222 0.078934 -0.00208391 +-0.127755 0.139318 -0.0980561 -0.0908191 -0.0733907 0.0203532 0.159281 +-0.0920969 0.208396 0.0156036 -0.200091 0.127974 0.0395545 0.0116631 +0.0743272 -0.126499 0.132529 -0.0953007 0.123712 -0.078223 -0.0163382 +0.104084 0.0993994 -0.0724851 0.166886 0.193674 0.0273915 0.0709334 +-0.0395487 0.0895268 0.0889484 -0.00710997 -0.155659 0.213252 0.145936 +0.212149 0.209009 -0.157068 -0.191406 -0.00746764 0.191534 0.0806529 +-0.110945 -0.171742 0.0461092 -0.147565 0.107846 -0.044346 0.182862 +-0.0644761 -0.0858064 0.0550425 -0.0958679 0.03817 -0.177639 0.120698 +0.0711522 0.0449057 -0.122984 -0.054183 -0.0687513 -0.127333 -0.0674979 +0.193451 -0.0127256 0.0644915 0.0326161 -0.0114128 -0.105916 0.173758 +0.0514912 -0.115653 -0.161222 -0.00476611 -0.13773 0.0854689 -0.0822358 +-0.161381 0.0236774 -0.155088 0.0437309 -0.137562 0.0671559 0.0871476 +-0.0421604 0.144062 -0.185112 0.0901474 0.172525 -0.181544 -0.046364 +-0.102488 0.114237 -0.161602 -0.181793 0.118405 0.10209 -0.16913 -0.166716 +-0.0144649 0.114457 -0.177584 -0.0795526 -0.153275 -0.0945481 0.198615 +0.0764526 -0.161438 0.0378139 -0.0691348 -0.178629 0.108782 0.151731 +0.0177777 0.196047 0.121159 -0.201375 -0.126326 0.153518 -0.104173 +0.172263 0.146907 -0.0176664 -0.0834507 -0.142872 0.147091 -0.0626841 +0.132974 0.00635607 0.0414528 0.199162 0.0839908 -0.100203 0.106594 +0.133035 0.12103 -0.118235 -0.107672 0.058426 0.11397 -0.0416509 0.0927299 +-0.100303 0.0709961 0.109996 -0.0903446 -0.0535805 -0.145821 -0.0959745 +-0.0837521 0.114064 -0.0103824 0.192805 0.0253374 0.106676 -0.0059829 +0.143166 0.155225 0.069973 0.177585 -0.0725978 -0.00102501 0.152026 +0.174496 -0.0668389 -0.122991 0.169162 0.143466 0.0841107 -0.0880505 +0.157568 -0.103738 0.0507492 -0.0998481 -0.156989 -0.107662 -0.0551859 +-0.133294 0.161826 0.175963 -0.0661633 0.126007 -0.190035 0.0092972 +-0.0411551 0.0829361 0.0709953 0.121547 -0.0602791 0.0462523 0.0146203 +-0.188068 0.0735257 -0.164606 -0.0488419 0.156753 0.0711526 0.00221219 +-0.0634613 0.165176 0.035219 -0.12677 -0.0717442 0.168748 -0.109586 +0.111461 0.0341829 0.101998 0.0618109 0.189829 0.0912702 -0.00186241 +-0.0433434 -0.0109901 0.10514 0.00251591 -0.0229517 0.138047 0.0200906 +-0.0869301 -0.185712 -0.0113521 -0.0353086 0.142783 -0.119065 0.0486695 +-0.165385 -0.06074 0.182049 0.149746 0.102271 0.0411116 0.0484548; +#A 3000 0.173558 0.0864053 -0.0398964 -0.163088 -0.0743301 0.0764632 +0.0642505 0.0859902 0.0358329 0.164668 0.185583 0.0353322 0.150186 +-0.0673695 0.0130015 -0.0308566 0.0243223 0.086611 0.125987 -0.0834 +0.136504 0.0972897 -0.0322126 -0.0595156 -0.0117016 0.0200816 0.174668 +0.145331 0.0151355 0.174449 0.00582571 0.0439086 0.0765667 -0.178212 +-0.153946 -0.146511 0.0721378 -0.0277833 -0.0724084 0.0389396 0.0916826 +0.0469879 0.0735868 -0.136336 0.109006 0.132552 0.0807181 0.0430299 +-0.0476355 0.0295503 0.00502616 0.0213951 -0.0923652 -0.148128 -0.00796943 +0.0710561 0.140625 -0.0142634 0.019726 -0.148771 0.0392031 0.0622252 +-0.085075 -0.0514789 -0.0154989 -0.173611 -0.00463826 -0.0937347 0.145399 +0.0810978 -0.171749 -0.0593341 -0.0834753 0.144305 0.122191 -0.126667 +0.118683 0.0523141 -0.112697 -0.0573408 0.114695 -0.0171614 -0.0783925 +-0.0774069 -0.169516 0.128926 0.154329 0.106715 -0.106938 -0.0409872 +0.111444 -0.0967544 -0.07789 0.0341553 -0.0127092 0.0462965 -0.0850067 +0.032137 -0.138081 -0.0358738 0.12415 0.0332228 -0.109311 0.158179 +0.15287 0.131136 0.0559478 0.110903 0.0632892 0.137327 -0.163804 0.127648 +-0.00612092 0.0689045 -0.130614 0.123659 0.0423482 0.0244303 0.0533944 +-0.103913 0.0644314 0.147814 -0.000301854 0.164613 0.0770267 -0.007688 +0.0795304 -0.0891494 -0.115913 0.0338951 -0.0266791 -0.00139539 -0.0107366 +-0.167743 -0.112874 0.00364346 0.0246054 0.0506078 -0.0365013 -0.0613995 +-0.162893 0.115542 -0.0434122 0.000662969 0.133679 0.0608481 -0.157543 +0.0701366 -0.00752228 0.062997 -0.00232885 -0.0245298 0.05496 0.0685631 +-0.0537974 -0.162219 -0.126501 -0.152731 0.0605448 0.15829 -0.093694 +0.131179 0.142254 -0.0162248 0.0574343 0.149152 -0.0570182 -0.150853 +0.155237 -0.0576269 -0.0740736 0.103659 0.00790221 0.0704513 -0.0568679 +0.0106242 0.0371273 0.0824222 -0.164666 -0.0830993 -0.161305 0.0638288 +-0.0607619 -0.154124 -0.0244543 -0.0618564 -0.138769 -0.161935 0.0493661 +-0.154418 0.138621 0.0403727 -0.00528452 -0.0566457 -0.129225 -0.103856 +-0.0352825 -0.0351495 -0.153171 0.0344591 0.137348 -0.157252 0.0170674 +-0.0111438 0.119622 0.0783717 -0.158601 -0.0803632 -0.101834 -0.0766658 +-0.157058 0.128418 0.0479387 -0.137988 0.156363 0.0178816 -0.0723136 +-0.0452653 -0.0159216 0.0372501 -0.00573264 -0.108602 -0.13679 0.155166 +-0.158697 0.0824443 -0.0170316 0.0335439 0.0170823 -0.0561548 0.0428964 +-0.0858373 -0.0824806 0.102465 -0.0135689 -0.0165507 0.0732273 -0.107949 +0.00977816 0.143483 -0.106062 0.0239498 -0.139412 -0.13419 0.0995984 +-0.0624123 -0.0420321 0.0129472 0.00387326 -0.0153612 -0.0951885 0.00409278 +0.0920586 -0.102916 0.0759207 0.109607 0.103106 -0.143043 -0.0185282 +0.0434247 -0.129843 0.0691915 0.00224206 0.143839 0.0689207 0.109069 +-0.0838886 0.132185 0.0886391 -0.0944101 -0.153513 0.133218 -0.123263 +-0.140702 -0.116041 -0.0937273 0.135206 0.112007 -0.0549318 0.0097323 +-0.0189892 -0.0941122 -0.136567 -0.041169 0.0800246 0.0887374 0.0141533 +-0.148689 -0.14829 -0.142357 0.0227182 -0.090651 0.123609 0.0208081 +-0.14877 0.105323 -0.100936 -0.0884676 -0.118898 -0.130214 0.0635899 +-0.127105 0.0125208 -0.00695408 0.0136048 -0.143893 -0.0909064 0.0541485 +-0.0169242 -0.078393 0.0641363 -0.129023 -0.0439865 -0.0926122 0.0785349 +0.102233 0.0181518 0.0741398 -0.120359 -0.0699596 0.0317246 0.0261806 +-0.0485861 -0.085642 0.133362 0.101745 0.00223944 0.126139 -0.0363134 +0.147574 -0.050396 -0.134334 -0.0949427 -0.134784 -0.0714207 0.113255 +-0.133133 0.108113 -0.0676188 0.130769 0.0750587 0.119601 -0.0274351 +0.0584047 0.0171742 -0.131771 -0.129168 0.0319371 -0.0387252 0.0804702 +-0.143578 -0.0289375 0.0459569 0.0178343 -0.0826935 0.0251686 -0.105605 +0.00729027 -0.040004 -0.0750128 -0.100395 -0.0499645 -0.105713 -0.138029 +0.106065 -0.0526687 -0.0673471 -0.0156689 -0.0976511 0.124586 -0.0494665 +-0.0262731 -0.0572895 -0.0431664 -0.0678085 0.132328 -0.0415095 -0.0356755 +0.0516783 -0.0467004 -0.0407006 0.0294756 0.111597 -0.0820459 -0.0798673 +0.0877687 0.0565628 -0.0726594 -0.0298497 0.0273784 0.123714 0.0953478 +-0.0578996 -0.0563484 0.0732273 -0.0939433 -0.0134044 -0.103775 0.0505915 +-0.0128405 -0.0187125 0.0214177 -0.0394197 -0.00312144 0.0010957 -0.12721 +-0.0986527 -0.0273788 -0.12769 0.0760943 -0.0367239 0.0532083 0.0574171 +0.12846 -0.0381186 -0.00238101 -0.0441273 -0.0870778 -0.0621075 -0.110292 +0.0414898 -0.127919 0.0265038 0.0708036 0.0287773 -0.131407 -0.0155435 +0.040803 0.0300598 0.0595005 0.0306868 -0.0814499 -0.022711 -0.0954945 +-0.040151 0.0284474 0.0798937 -0.00645906 0.115213 0.0168048 0.115433 +0.0947185 0.0977 -0.0432901 0.0244274 0.0219628 -0.126507 -0.126708 +-0.115355 0.0131409 -0.0178251 -0.113995 0.0885133 0.0886676 0.054478 +-0.123537 0.102725 0.0274028 -0.0201851 0.0359829 -0.130632 -0.0530071 +-0.0870958 0.13014 0.0436166 -0.129825 -0.0540442 -0.0877443 0.0241994 +-0.100787 -0.013293 0.128893 -0.054039 -0.0783347 0.103837 0.120657 +-0.0838516 -0.0818118 0.00488695 0.0341884 -0.00792697 0.0664923 0.0428005 +-0.10777 0.0932301 0.118478 0.0311577 0.0622649 0.112278 -0.0944156 +0.116036 -0.0546071 -0.0415273 -0.0994695 -0.0042225 -0.106228 0.0578003 +0.00560405 -0.0832121 0.0286824 -0.0455286 -0.00944815 0.0248472 -0.0749605 +-0.00915242 -0.012491 -0.0772782 -0.0780326 0.0426449 0.00624683 -0.0182367 +-0.110369 0.0203082 0.0388392 -0.0134558 -0.113461 0.0394771 -0.0305197 +0.0535718 0.0984983 0.0107777 0.0630689 -0.0685532 0.0743478 -0.059173 +-0.0254748 0.0385105 0.0820903 -0.0911478 -0.120632 0.125234 -0.0415189 +-0.0198608 0.122306 -0.0708164 0.0731587 0.0576574 -0.0779969 0.00798973 +0.0614933 -0.0739947 -0.0482081 -0.0301763 -0.0863928 -0.0123479 -0.100468 +-0.0553885 0.10061 -0.0871712 -0.0992769 -0.0412806 0.00637478 0.00683828 +0.00567641 0.00882006 -0.0507263 -0.00726054 -0.0316824 0.0720837 -0.00966656 +-0.00534259 0.0961286 0.0540446 0.0671545 -0.0480932 -0.0855013 -0.0767124 +-0.0603025 -0.0283065 -0.115748 0.0289509 -0.0606214 0.120343 -0.0549505 +0.119348 0.0432102 -0.0890348 0.112689 0.0359685 0.0076352 -0.0543289 +-0.0981038 0.0887975 0.0502702 0.0448753 0.0187022 -0.100448 0.117044 +0.0301797 -0.0562876 -0.118638 -0.0471621 -0.0536074 -0.010733 -0.0371306 +-0.0415894 -0.0232408 -0.00817158 -0.0322478 -0.0823216 0.057985 0.0184162 +-0.0729541 -0.0238277 -0.0764938 -0.0821643 0.0853423 -0.0191425 0.0456314 +-0.101011 -0.111164 0.0887079 0.108839 -0.0366411 0.0366845 -0.00794471 +0.0743201 -0.116002 -0.0880584 -0.117199 -0.0229633 -0.0431907 -0.0157511 +0.0352888 -0.0957762 -0.0969923 0.0871341 -0.0168125 -0.0847782 -0.0248615 +0.0266423 -0.108505 -0.0960715 -0.0161921 -0.115153 0.0824413 0.109353 +0.0430087 0.0247346 -0.073886 -0.0798892 -0.0428891 0.101965 0.0785867 +-0.0912218 0.076108 -0.0998503 0.0819016 0.0493919 0.101686 0.0925761 +0.0108485 -0.00341864 0.0582651 -0.0772319 0.0653804 -0.00490431 -0.0818488 +-0.0530744 -0.00234148 0.1021 -0.0181815 0.0673436 -0.0136986 0.0555192 +-0.0684297 0.0674482 -0.0522361 0.00339143 0.0189195 0.0797529 0.0596698 +0.0214301 0.00636965 0.0766288 -0.034823 0.0377106 0.00443192 -0.00475465 +0.0917248 -0.0711176 -0.0100447 0.0300136 0.0602811 0.0102313 0.0676439 +-0.039796 -0.112646 0.107967 0.107395 0.00903484 0.0965092 -0.0592804 +-0.106459 0.0604111 0.0907119 0.10979 -0.00141599 -0.0475283 -0.037476 +-0.110551 0.0193624 -0.0671819 0.0987725 -0.100837 0.0151567 -0.0613616 +-0.0399829 0.0113761 -0.020814 -0.0575396 0.0368101 -0.102924 0.0381659 +0.0154235 0.0737416 -0.0530872 0.042365 -0.10586 0.0209801 -0.0774718 +0.0965817 0.0366656 -0.0734282 -0.0118983 0.0414423 -0.020581 0.103915 +-0.0789889 0.0899482 -0.0592233 0.0434926 0.0242897 -0.0160691 -0.0504465 +0.0052492 0.0148264 -0.044935 0.0189129 0.0374787 0.0413752 -0.00717599 +0.0470786 -0.0687287 -0.0953715 0.0418426 0.0966302 0.0899492 -0.0423821 +0.0345056 -0.0288465 0.0772198 0.00742612 -0.0235636 0.0297662 0.0246235 +0.106263 0.0836961 0.0140199 -0.0648137 -0.00286074 -0.0929327 -0.030786 +-0.09722 0.00232895 0.0702008 0.0360142 -0.0431214 -0.0615409 0.0120698 +-0.0179491 -0.0369778 -0.102966 0.0383491 -0.0471985 -0.001574 -0.0932257 +0.0263893 -0.103223 -0.0657719 -0.0310277 0.0910421 -0.00489068 -0.0861269 +0.0399926 0.0380773 -0.0115539 0.0411883 -0.0379355 -0.0800769 -0.0805847 +-0.0813157 -0.0340343 0.0106786 -0.0194467 -0.0977389 0.0783219 0.00667025 +-0.0994575 -0.0922637 -0.0989971 -0.0583375 -0.0627319 -0.0632006 -0.0127436 +-0.0960202 -0.0458013 0.0291997 0.06792 0.0148387 0.0992669 0.0626022 +-0.0852894 0.050106 -0.00703903 0.0145449 -0.0673959 -0.066469 -0.0870324 +0.0671034 0.0673042 0.0684892 0.0827303 -0.0492994 0.0985079 0.0975959 +-0.0767962 -0.0354165 0.0787236 -0.0483149 0.085719 0.0174181 -0.0901367 +-0.0748318 -0.0168138 -0.0611439 0.0793303 -0.000382945 -0.0831188 +0.0348028 -0.0630469 0.0279596 -0.0758223 0.0889051 -0.0657222 -0.0351514 +-0.0108462 0.0206023 0.00342939 -0.056033 0.00170116 -0.0135202 0.0920253 +0.00821804 0.0627429 -0.0625612 0.0475009 0.0911915 -0.052369 0.0196653 +0.0436813 0.0480595 -0.0967523 0.0373786 -0.0284933 -0.0696583 0.0129352 +-0.0489368 -0.0366684 -0.0858022 -0.0854107 0.0254629 0.0806221 0.0843674 +0.0288046 0.0532854 -0.0407318 0.0770768 0.00574052 -0.00424772 -0.0410003 +-0.0636551 0.0470132 0.080742 -0.0683668 0.0397289 0.0391872 -0.013384 +0.0764705 -0.0771787 -0.00250281 0.00434914 0.0095641 0.0415522 0.0712155 +-0.065202 0.0915026 -0.0719902 -0.069749 -0.0429729 0.0211485 0.0375925 +0.0136204 0.0104715 0.0613622 0.0113693 0.0587059 -0.00777694 -0.0719939 +0.037853 0.0624963 -0.00244391 -0.0882534 -0.0211197 0.0498613 0.039521 +0.0554317 0.0586651 -0.0132119 0.00789909 0.0486014 0.0917666 0.021918 +0.0485426 0.00913585 0.0759319 -0.0672207 0.052421 0.0888714 0.0774803 +0.0197589 -0.057988 0.0406684 -0.0197807 0.0884112 -0.00177422 0.0392753 +0.022705 0.0633483 -0.0612946 -0.0309161 0.0848013 -0.00653231 0.0777233 +-0.0370621 -0.0503526 0.0113136 -0.0504009 -0.0286294 -0.0288821 0.0652834 +-0.0799183 0.0230335 -0.0454548 -0.0248015 0.0873202 0.0717325 -0.0821504 +-0.0150553 -0.0262376 -0.0178746 -0.0206601 -0.00478706 0.0732438 0.0113788 +-0.0674488 0.0260477 -0.00372725 -0.021158 -0.0486368 0.0873743 -0.0776077 +0.0188391 0.0735687 0.00740782 -0.0747897 0.0247785 -0.0824243 -0.0674632 +0.0673154 -0.050897 0.0485181 0.0626501 0.00544994 0.0529686 -0.00365343 +-0.00645985 0.0622872 0.0467649 0.0643953 -0.0315704 0.0299958 -0.0354854 +-0.0207879 -0.0487645 -0.0264784 -0.0759335 0.0658809 0.0760264 0.0113502 +; +#A 4000 0.0232085 -0.00295692 -0.0037627 -0.0302234 0.0199647 0.0487856 +-0.0563897 -0.0430549 0.0182524 -0.0553319 -0.0117767 -0.0710143 0.0576602 +0.0151193 -0.0385029 -0.00116495 0.0134047 -0.0371417 0.0268056 -0.0787356 +-0.0287352 -0.0700739 -0.00614181 0.0035292 0.037925 0.0447966 -0.0270117 +-0.0111899 -0.0584252 0.0212179 -0.0495641 0.0494275 -0.0399874 -0.00156313 +0.00951535 -0.0654701 -0.0788001 0.0506299 -0.00318004 0.0389564 0.0417943 +-0.0826117 -0.00295447 -0.0373947 0.0213437 -0.0395203 0.0831919 -0.00135541 +-0.0396605 -0.0383961 0.0298691 -0.0469609 0.046156 -0.00677279 -0.00670764 +0.0332374 0.0367584 -0.0199451 -0.0299017 -0.0698981 0.0433913 -0.0246412 +0.0554748 -0.0500904 -0.0695468 -0.02356 -0.00693216 0.0161949 0.00728662 +-0.0499378 0.0116285 0.0506661 0.0190768 0.0629156 -0.0392995 0.0591692 +-0.0786462 -0.0348695 0.0602216 -0.0703871 -0.0558726 -0.0743552 -0.0376303 +-0.0731023 -0.0376348 0.0320921 0.0684899 0.081023 -0.0249217 -0.0659174 +0.0236278 -0.048032 0.0488733 -0.0746391 -0.0529973 0.053481 0.0610931 +-0.0500703 -0.0123857 0.0716112 0.050769 -0.0470996 0.00917141 0.0444948 +0.0419748 -0.0557659 0.0408033 -0.0391869 -0.00952783 -0.0584194 0.0415058 +0.0429153 0.00975938 -0.0459918 -0.0527684 -0.0465876 0.0773995 0.00565338 +-0.00609835 -0.0454705 0.0237648 0.0405301 0.0483184 0.0350996 -0.0461078 +0.0258797 0.0134373 0.0366518 -0.00598282 -0.0641379 0.0296166 -0.0274792 +0.00420166 -0.0691912 0.00849212 0.0675445 0.0368539 -0.0509026 0.0706284 +0.0588616 -0.0292046 -0.0333575 0.00557093 -0.056585 0.042427 -0.0194417 +-0.0600566 -0.0228791 -0.0601686 0.0316606 0.0298546 -0.0564214 0.0281264 +-0.0421375 -0.0321013 0.00861586 0.0615034 -0.0442022 -0.00940106 0.0682671 +0.0198141 -0.0506283 -0.000816518 0.0613501 -0.0224049 0.0727526 0.026645 +0.0102108 -0.0621173 -0.0298775 0.052307 -0.0527452 -0.0662842 -0.0419854 +-0.0667265 0.0312524 -0.0605519 -0.0539439 0.0507988 -0.0516462 0.0463087 +0.0654916 -0.0401101 0.00805014 -0.000735866 -0.0216371 0.0129501 0.0181212 +0.0464236 0.0235335 -0.060339 0.00224643 -0.0469302 0.00385983 -0.062532 +0.0517418 0.0693544 -0.0439005 -0.0688071 0.0697483 -0.0186708 0.058293 +-0.0119901 -0.00160754 -0.0567549 -0.0111007 -0.0457444 -0.0686136 +0.0485991 -0.0560067 -0.0603094 -0.0311315 -0.0347783 0.0671608 0.0274932 +-0.0338023 -0.0527029 -0.0724365 -0.0459632 0.0488177 0.0525665 0.0703671 +0.0600539 -0.00278851 0.0612016 -0.0330564 0.0254928 -0.0242087 -0.0644278 +0.0659684 0.0348146 -0.00816879 -0.0519871 -0.0274256 0.0229449 -0.0269983 +0.0563946 -0.0180679 0.0414729 0.0212699 -0.0314747 0.0578209 0.013648 +-0.012467 0.0203291 0.00107844 0.0251646 -0.061182 0.0226602 -0.0679105 +0.00956147 -0.0535254 0.0677524 -0.0455229 -0.0328604 0.0542836 0.0213329 +0.00101921 0.00426161 0.00245122 -0.0311841 -0.00298272 0.0579049 -0.0319819 +0.0602026 0.0550147 0.00833849 -0.0645982 0.0460022 0.00681244 0.0318528 +-0.0547733 0.0329283 -0.0529877 -0.0547249 -0.0413451 -0.050919 -0.0265143 +0.0429341 0.0337823 -0.0528125 -0.0323879 -0.0371068 -0.0151879 -0.0557561 +-0.0398862 0.00125247 0.0376735 -0.0452306 -0.0216141 0.0512187 0.0101807 +-0.0244687 0.0666922 0.0223105 0.0336601 -0.0257667 -0.0659288 -0.0533143 +-0.0568824 -0.0204123 -0.00913007 0.0495334 0.059042 0.00149375 -0.0199719 +-0.0204401 -0.0242784 0.0533368 -0.0547379 0.0274176 -0.0539052 0.00703998 +0.0122314 0.0207328 0.0082407 -0.0502405 -0.0580947 -0.0652968 -0.0408456 +-0.0300353 0.0500554 0.059924 0.0226976 0.0470676 0.0300832 -0.0521303 +-0.0434677 0.0420662 -0.0637253 -0.0282353 0.0472294 0.0487775 0.000406203 +-0.0564663 0.0256907 0.0520261 -0.0369613 -0.0564767 -0.00832827 -0.0490619 +0.0114895 0.0610402 0.0534141 -0.0617665 0.0463494 -0.0212997 0.00731406 +0.0640723 0.0283931 -0.0482548 -0.0415955 0.034499 -0.0355501 0.0641118 +0.0611263 0.00806472 0.0537014 -0.0194965 0.04187 -0.0621171 -0.0308196 +-0.0526858 0.0378897 0.0417617 -0.0327886 -0.038842 0.0533235 -0.0379307 +-0.0230401 0.0631726 -0.0354479 0.0606431 0.0038577 -0.0353015 0.0611083 +0.00986514 0.0525498 0.0322595 -0.0262471 0.0175871 -0.0425034 -0.034341 +0.0343512 -0.00582132 -0.00216965 -0.0308996 0.0194773 -0.0480123 0.0367159 +0.000979969 -0.0603171 -0.00716886 -0.0497715 -5.74132e-05 -0.0237112 +0.017545 -0.0457071 -0.0482234 -0.0428745 0.0270232 -0.0293815 0.0470682 +-0.0199057 0.017803 0.018121 -0.0528311 -0.047878 -0.0283641 0.0154843 +-0.0112566 0.0223315 0.0585076 -0.0163455 0.0208455 -0.0574329 -0.0449024 +0.0316602 0.0546824 0.0459631 -0.0378298 0.0104215 0.0239305 -0.0574579 +0.0187883 0.0470083 0.00134487 0.0373891 0.0287596 0.0176246 0.0211383 +0.0522366 0.0304413 0.0180927 -0.00520472 -0.00493491 -0.0245225 0.0203045 +-0.0441135 -0.0503216 -0.0423394 0.040382 0.0328318 0.0178739 0.0522771 +-0.0218727 0.0384792 0.0564295 0.0116536 -0.0395358 -0.0195086 0.0369713 +-0.00507094 0.00272098 -0.0548548 -0.0412066 -0.0344362 0.0572448 -0.0455309 +0.0260816 0.00545119 -0.0263728 0.0301343 0.0366202 0.0124376 -0.0470996 +-0.0048548 -0.0289829 -0.0459082 -0.0197317 -0.056052 0.0208885 -0.028215 +-0.009879 -0.0169501 -0.044545 -0.00561645 0.0561034 -0.0512953 0.0195345 +0.0183656 0.0340246 0.0159045 0.0147001 0.011293 0.0383048 0.0139301 +0.0205511 0.0161483 0.0285812 -0.0244202 -0.00411797 -0.00120473 -0.001106 +-0.0315709 -0.0190053 0.00879033 -0.0343857 0.0141961 -0.013577 -0.0283298 +-0.0163206 -0.018112 0.0241002 0.0172528 -0.0331261 0.0137344 0.0541693 +-0.00740887 -0.0146491 0.0238594 -0.0392272 -0.042653 0.0295971 -0.0437868 +-0.00104993 -0.0232523 0.0283198 0.00915047 0.0457421 0.00180389 0.00356868 +-0.052484 -0.00556803 0.0541313 0.0304336 0.046445 -0.0515958 0.0511773 +0.00641148 0.0217138 0.00164088 0.0439702 -0.00253807 0.0232517 0.0512915 +-0.011806 -0.047276 -0.0459035 -0.0337341 0.0340615 -0.00716726 -0.0350575 +-0.00532302 0.0286125 -0.0347484 0.0504601 0.00725448 -0.0316892 0.00142906 +-0.0507116 -0.0382314 -0.012945 0.0199415 -0.0199314 -0.042792 -0.00173364 +0.0123201 0.024731 -0.00536449 -0.0448082 0.0309147 -0.00904821 -0.018492 +-0.0267931 -0.00778724 0.0268095 -0.0269223 0.00179272 0.0369286 -0.0314397 +0.0145588 0.00223041 -0.0350915 0.0311863 0.0130095 -0.00934447 -0.0381999 +-0.00304966 -0.0491975 -0.0500033 -0.0168451 -0.0450088 0.0163931 0.0291041 +0.00727728 -0.036848 0.0340685 -0.0116662 -0.00148679 0.00103389 -0.0374032 +-0.0300421 -0.000105296 0.00117334 -0.00228839 -0.00488078 0.0444215 +-0.0437324 -0.0178209 -0.0426513 -0.00816167 -0.00153485 -0.0249988 +-0.00222452 0.00441124 0.045266 0.0214263 0.0356299 0.0246222 0.0351585 +-0.0465375 -0.00904492 -0.00394886 0.0319304 0.0254875 -0.022898 0.00386978 +0.000347115 -0.0441399 -0.0371762 0.0367699 -0.0380647 0.0133768 0.0159541 +-0.0213193 0.0226873 0.0139755 0.0195783 0.0227935 -0.0215736 -0.0487342 +-0.0358417 0.0125099 -0.00821951 0.044817 0.0109874 0.00481487 0.0474796 +0.0249953 0.0382578 -0.0383005 -0.0158843 0.0264883 -0.0437816 -0.0379181 +-0.0107408 0.0216199 -0.00929034 0.0435413 -0.011691 -0.0284183 -0.0354493 +-0.0250706 -0.00738957 -0.00160084 0.0226224 0.0250018 0.0291519 -0.00179127 +-0.0331567 0.00424755 0.0478301 -0.0398232 0.0225477 -0.0167039 -0.00145396 +0.0148112 0.0331616 -0.0322901 -0.0219004 0.028229 -0.0166997 -0.0152668 +-0.0303827 -0.0105952 0.0116113 0.00215041 0.0378414 0.0336669 0.0216083 +-0.0329385 0.0246664 0.0180005 0.0311766 -0.0386748 -0.0200423 -0.0254794 +0.0216373 0.00205767 -0.0026129 0.0157657 -0.0462159 -0.0365779 0.0307631 +-0.0139408 0.0394106 -0.0117476 -0.0299753 -0.0208686 -0.0361304 -0.0126577 +-0.0301614 0.0351149 0.0423119 0.00348616 0.0104074 -0.040338 0.0271404 +0.0388229 -0.00377744 -0.00465373 0.0270036 0.00058781 0.0124913 0.039063 +0.0130591 0.0354801 0.00649493 -0.00799274 0.0410164 -0.0289106 -0.0021224 +0.0335194 -0.00719606 -0.0314962 -0.00957143 0.00862059 0.0229873 0.0112813 +0.0433841 0.0209205 -0.0155161 -0.0329042 -0.0398198 -0.0403796 0.00815549 +0.0277006 0.0333835 0.0408551 -0.0225481 0.00379061 -0.0283602 0.0261624 +-0.0306885 -0.0116726 0.0437106 -0.0145126 0.0439009 -0.0332225 -0.0316633 +0.00679859 0.0173038 -0.013825 0.00471999 0.0222479 0.00680166 -0.00827523 +-0.0172671 0.00998321 -0.0192239 0.0380591 -0.00974715 0.038819 -0.00663069 +-0.00415495 -0.0191781 -0.0133687 -0.0412435 -0.0206221 -0.0257818 +-0.0219611 0.0132269 0.00974006 -0.0276068 -0.027113 -0.0122657 -0.0350041 +0.0275005 -0.0142673 -0.0156015 -0.0194604 0.0306659 -0.0199164 -0.0198592 +0.00947517 -0.00495544 0.0414039 0.0129279 0.00848902 -0.0280356 -0.0254557 +0.00414192 -0.0285504 0.0323534 0.0280198 -0.0146886 -0.0167676 -0.0245948 +0.0263374 -0.0371355 0.0417638 0.0280166 -0.0340907 0.0158902 -0.0113252 +0.00561381 0.0344036 0.0378688 -0.0387572 -0.0327194 -0.0134105 -0.0387978 +0.026158 0.00732316 -0.0393751 0.0382705 0.00761807 0.0312192 -0.0214935 +0.0263325 -0.00280985 0.00876339 -0.0291963 0.0092623 -0.0279623 0.0372623 +-0.0155016 0.0373925 0.0129782 -0.0240901 -0.000382024 -0.00063029 +-0.0303984 -0.0396524 0.0134525 -0.037749 -0.0382185 -0.0033881 -0.0183828 +-0.000140294 0.00388887 0.0271782 0.021568 0.00521532 -0.0212649 -0.0245851 +-0.00874191 -0.0329973 0.0312623 0.00826409 -0.0257638 -0.0192993 0.0185333 +-0.0215308 -0.0205771 0.00182865 0.0221678 -0.0320758 -0.0160253 -0.0198682 +0.000660462 0.0104033 -0.00520725 -0.0291332 0.0194919 0.0367563 -0.0286114 +-0.0110771 0.0259347 0.0363141 0.0042874 0.00293622 0.0382681 -0.0385143 +-0.0355985 -0.0122022 -0.0380717 0.00275173 0.0318358 0.0338793 -0.0297797 +-0.0112633 -0.00243917 -0.0277539 -0.0282676 0.011427 -0.0166744 -0.0130673 +0.0293463 0.0219637 0.016172 -0.0289725 0.0250573 0.0270533 0.0131094 +0.0205053 0.0358969 0.0338678 0.0126391 -0.0120052 -0.0371907 -0.0226067 +-0.0336317 0.0093574 0.0164499 0.00716317 0.00576894 0.0218776 0.00899573 +-0.00153709 -0.0278492 0.0237625 0.0273851 0.0275101 0.0210411 0.0106127 +-0.00784759 -0.00152568 -0.0324362 -0.0308996 -0.0131359 0.00161629 +-0.00213867 0.000108056 0.00737141 -0.0194758 -0.0181708 -0.0210741 +0.0296536 -0.0233513 -0.00517655 0.0115864 0.0210976 -0.0161077 -0.0318391 +-0.0139962 -0.0302747 0.00704774 0.0211407 -0.0119257 0.00342778 0.0281486 +0.00610502 -0.0342753 0.0182799 0.0278164 0.020619 0.0318338 -0.0180253 +-0.0118973 -0.00897804 0.0240822 0.0325911 0.0205736 -0.000439841 -0.0131164 +0.0216454 -0.0258035 -0.0199313 -0.0169216 0.0104289 0.0294133 0.00646299 +0.0343042 -0.00699336 -0.0131239 0.0265836 -0.0253401 -0.00381108 0.035079 +-0.0280135 -0.00684215 -0.0160239 0.00875539 0.0226003 0.0255409 -0.00843269 +-0.0249587 -0.0245871 -0.0199702 -0.00500268 0.0227476 -0.0339641 0.00947815 +0.00929899 -0.029653 0.013679 -0.000594559 -0.00559267 0.0293031 0.0079757 +0.0148724 -0.013213 -0.00815607 -0.0123639 0.0339289 -0.0288844 -0.00558602 +0.0194138; +#A 5000 0.011794 -0.023335 0.0195792 0.0291025 -0.00562236 -0.0153483 +0.00357997 -0.00770151 0.00909717 -0.0100473 -0.00818514 0.0023615 +0.0089601 0.0108067 0.00474749 0.0177341 0.00250366 -0.0189739 0.0243105 +-0.0333674 0.0301901 -0.00483403 0.0306426 -0.00112348 -0.00822323 +0.0326775 0.0213102 0.0187695 -0.0087805 -0.0298401 0.0135209 -0.0276573 +-0.00296547 0.00493955 0.0298277 0.012313 0.0200528 -0.03056 0.00231328 +0.0208099 0.00885818 -0.0147446 -0.0109534 0.00758571 -0.00803555 0.0115444 +-0.0208973 -0.0047034 0.00573858 0.00375047 0.00972034 -0.0115607 0.00802264 +0.0199435 0.00681596 0.0234824 -0.0293348 0.0195667 -0.001767 -0.0224462 +0.0176703 0.00283818 -0.013611 -0.0281063 -0.0294261 -0.0283942 -0.0010303 +0.0189098 0.0312762 -0.0296071 -0.00407273 0.0101747 -0.02091 0.0159894 +0.0151751 -0.0277165 0.00752312 -0.0182507 -0.0148558 0.0184244 0.0213509 +0.000820939 0.0263058 0.00475986 -0.00412142 0.00280555 -0.0170212 +0.0189312 0.00113172 0.0218175 0.00453768 0.00535973 0.0245663 0.0182178 +-0.0136914 -0.0300476 0.0290831 0.02761 -0.00816106 0.0108763 -0.00575712 +0.0153209 -0.0234047 -0.0025652 0.00215573 -0.00641798 -0.00953584 +0.00198757 0.00231762 0.0295187 -0.00370301 0.00947679 -0.00933436 +0.0264409 -0.0202738 0.0111224 -0.0116462 0.00691194 -0.018946 -0.0093047 +0.00608635 -0.0156492 -0.00825471 -0.014183 -0.00553767 -0.0279252 +0.0173518 -0.0158998 0.0184068 0.00694272 0.0054242 0.0144424 -0.00178177 +0.0099006 -0.00336844 0.0148623 -0.0273405 0.0178337 0.022197 0.0119439 +-0.0112646 0.0140386 -0.0106163 0.0180122 -0.0202539 0.0109307 0.0213784 +0.00371602 -0.0192908 0.0289985 0.0199365 0.0016619 -0.0234802 -0.0248305 +-0.0244316 -0.00892402 0.0276999 -0.000926093 0.025319 -0.0279166 -0.0229266 +-0.00501592 -0.0202896 -0.00483199 0.00630874 -0.013418 -0.0127354 +-0.0235411 0.0267571 0.00479899 -0.0236766 -0.0147266 -0.0223787 -0.0170078 +0.000869558 -0.0258323 -0.0104767 0.00661562 0.0010565 -0.0206533 0.024914 +0.0100474 0.0037721 -0.00564504 0.0165739 -0.00264078 0.0254048 -0.0276773 +-0.0114254 -0.00650337 0.0187751 0.00821754 -0.00583379 0.0105602 -0.0266668 +-0.0215112 -0.0135702 -0.0262893 -0.00104969 -0.0272616 0.00774709 +-0.00853758 0.0107151 0.0169605 -0.0216254 -0.022073 0.00777973 -0.0190075 +0.020625 0.0045367 0.00582445 -0.0104339 0.00329198 0.00728507 0.0118011 +0.0269013 0.000558021 -0.00048552 -0.0140847 -0.00522203 -0.0255445 +0.0245787 0.00527942 -0.00377134 -0.0136796 0.0164392 -0.0162625 -0.0135448 +0.0172811 -0.00420916 0.022249 -0.0240094 -0.00804154 0.00991048 -0.00232563 +-0.0220275 -0.000955787 -0.0179544 -0.00977216 0.0224331 0.0209739 +-0.00309348 0.00633736 -0.0257301 0.0231549 0.0180547 0.00836457 -0.00670235 +-0.0241312 -0.0108565 -0.01758 0.011053 0.0178038 -0.00297904 -0.00855139 +0.00773135 -0.015522 -0.0195589 0.0085583 -0.0133518 0.0128526 0.0225487 +-0.00225824 0.0132192 -0.00552192 -0.0142598 -0.0202987 0.0113768 -0.00436293 +-0.0192834 -0.0181217 -0.0169494 -0.00370834 -0.0229671 -0.0227786 +-0.0176028 -0.024228 -0.0103294 0.012895 0.00295277 -0.0163752 0.0228927 +0.0231382 -0.0198241 -0.00338745 -0.0217258 -0.0169829 0.00511858 0.0153656 +0.0238241 -0.00390502 0.000543026 -0.00215885 -0.0216081 0.0223212 +0.00900532 -0.0209824 0.00233115 -0.00638642 -0.00475563 -0.0207349 +0.0102267 0.0117699 0.00764262 0.000485487 -0.0120865 -0.00596644 0.00750027 +0.0102399 0.0222689 -0.00626576 0.00507691 0.0108058 0.00466612 0.0184326 +0.0114898 -0.00178554 -0.0214255 -0.0151043 0.00389931 0.00611453 0.011779 +-0.00255227 -0.00109455 -0.00630907 -0.0111268 -0.0107363 -0.00655222 +0.00916807 -0.0106535 -0.0236316 0.013587 0.00682021 0.00740389 0.0105095 +-0.0143288 -0.0140463 0.0195057 -0.0189149 -0.00293892 0.0209033 0.0150488 +0.0170115 0.00244874 -0.000531779 -0.00864751 -0.0158598 0.0134123 +0.00520285 0.0065825 0.00122747 0.0174485 -0.0136396 0.0125668 0.0106209 +0.00256686 0.0188095 -0.021408 -0.00995505 -0.00737002 0.00241848 -0.0224321 +0.0104947 0.00209399 -0.00934 0.00881614 0.00918312 0.00332746 0.00226015 +0.0177739 0.00872401 -0.00375418 0.00687959 0.0163251 0.00463709 -0.00249016 +-0.0103907 -0.0127825 -0.0211019 -0.00346187 0.0025176 -0.0195749 -0.00903949 +0.0127224 -0.0182452 -0.0037449 -0.0104937 -0.0147896 0.000441033 0.0151126 +0.0150496 -0.0151211 0.0198974 -0.00648868 -0.00881631 -0.00675153 +-0.0130507 0.00222756 -0.00907579 0.00369085 0.00471282 -0.0200166 +0.00682551 0.000475485 0.0109861 -0.0189455 0.0194092 -0.00761342 0.01566 +-0.00415192 0.00988988 0.0131523 0.0202126 0.00164586 0.00466115 0.0042258 +0.014235 -0.0200796 -0.0200053 0.00953259 0.00394879 -0.0137527 0.0133437 +-0.00601983 -0.0129815 0.0174546 -0.00236343 0.014976 0.00177654 0.0192543 +-0.0165936 -0.0200737 -0.00308647 -0.0121312 -0.00101508 0.00576133 +-0.0135534 -0.00414842 -0.00977185 -0.0110888 -0.0176665 0.020201 0.000103915 +-0.0162106 0.00129614 -0.00797941 0.00313392 0.00446713 0.0200555 0.0193115 +-0.0195953 0.00610523 0.00345976 0.000568659 -0.0177625 -0.00056385 +0.00307489 -0.00830557 0.0164053 0.00981673 -0.000337955 0.00587092 +0.0102994 0.00716086 -0.0179399 -0.00965425 0.00552933 0.0086652 0.0137781 +0.0143474 0.0166241 -0.0113579 0.00810173 -0.0171289 0.00335139 -0.000136389 +0.0164448 0.00379564 -0.00746737 -0.0155033 -0.0156839 0.00369368 -0.0108057 +-0.00556354 0.0161697 -0.00643513 -0.00174482 -0.016307 -0.00390513 +-0.01541 -0.00325067 0.00679664 -0.0106832 -0.00609779 0.013787 -0.0060264 +0.00175911 -0.0176059 0.00505219 0.00626133 0.00710359 -0.00326446 +-0.00914656 -0.00711672 0.00188894 0.00994349 -0.0109982 -0.0137967 +0.0112302 0.00518609 0.0163556 -0.0041245 0.00878321 -0.00932251 0.00495372 +-0.00866801 0.0188272 -0.0142209 0.0132164 0.00734867 0.0176389 0.016903 +0.00830682 -0.00676318 0.015767 0.0105981 -0.0180293 0.0118356 0.0166987 +-0.00292938 0.016494 -0.00390031 0.00456486 -0.0165654 0.00629518 0.00270334 +-0.0031696 -0.0125936 0.00468887 -0.0108615 0.0127615 0.00579049 0.0015124 +0.00919078 -0.00288787 -0.0069744 -0.010072 0.0110847 -0.0083595 -0.00520093 +-0.0140943 0.0130941 0.00291248 -0.00249142 0.0019882 -0.00552807 0.00907188 +0.00701001 0.0128446 0.0138812 -0.00669456 -0.0091914 -0.0155814 0.0118771 +0.00306768 0.0089601 4.87688e-05 -0.0165753 -0.0142439 -0.00446496 +-0.0153819 0.0127401 0.00882866 0.0138197 -0.00838846 -0.000717258 +0.00788621 -0.0136064 0.0173182 -0.00434114 -0.0120628 0.000557328 +-0.013825 -0.0130131 0.00130062 -0.0119241 0.00544472 -0.00266774 0.0136734 +0.0106791 0.0168159 -0.00526431 0.00662529 -0.00458634 -0.000645557 +0.0134741 -3.9694e-05 -0.000295426 -0.0129974 0.00815489 -0.00329835 +0.000379739 0.00903147 -0.00766313 -0.0109274 0.0023256 -0.0100161 +0.0125098 -0.0103888 -0.016187 0.0144716 -0.00322135 -0.0141911 -0.0140297 +0.00632885 -0.0156198 -0.0120266 0.00773087 0.00883036 -0.00943039 +0.00087353 0.0118156 -0.0159113 0.0162683 -0.0120294 0.00485543 0.00602778 +-0.000212966 -0.00699858 -0.00811812 0.0127374 0.00762 -0.0121463 0.0057338 +0.0152191 0.00373511 0.00997474 0.013611 -0.000622422 -0.00921167 -0.00405898 +-0.00366005 -0.0155302 -0.00623179 -0.00118671 0.00109995 0.00743866 +-0.0120657 0.00605737 0.00837801 0.00376192 -0.00333946 0.0102448 0.00211353 +0.00220577 0.00356102 0.00619844 0.0139441 -0.010854 0.0016684 0.0119057 +-0.0152422 -0.0103855 -0.013929 -0.0133092 0.0148162 0.0127014 -0.0141117 +-0.00589344 -0.0102384 -0.00916879 0.00964585 0.0100435 0.00215131 +-0.00772844 6.60042e-05 0.00737175 -0.00450362 -0.0125272 0.0136496 +-0.000460775 0.0108109 0.0139025 0.0039098 0.0139418 0.00521247 -0.00768274 +-0.0151775 -0.00242032 -0.0121441 -0.00326192 0.0148182 -0.00927056 +0.00796059 -0.00516314 0.00772112 -0.0136727 0.000215002 0.00966329 +0.00737751 -0.00393126 0.00178057 -0.000231045 0.0132805 -0.0122922 +0.0125806 0.0033438 -0.00273845 -0.0050877 -0.014159 0.00414198 -0.0138216 +0.00971385 0.00317629 0.000276221 0.00237725 -0.0115982 0.011698 0.00499187 +0.0133066 -0.00401141 0.0141446 0.0109956 0.00636107 -0.00976566 -0.000792338 +0.00661025 0.0107527 0.0098179 -0.00330331 0.0130513 0.0107277 0.00444097 +-0.00541295 -0.0013376 0.0118424 0.00629169 0.00861314 -0.0116223 -0.00165359 +0.00453897 -0.0136798 -0.00758352 0.0123301 -0.0135285 0.00381468 -0.0134026 +0.0119324 -0.00153256 0.0135537 -0.00143586 -0.00663921 0.00202939 +-0.00145424 -0.0111718 0.00449651 0.00591836 -0.0104056 0.00640195 +-0.00146417 -0.00672711 0.00589206 0.00103691 0.00269587 0.00947889 +0.00436132 -0.00817976 -0.013467 -0.00629897 0.0017077 0.00490634 -0.0130369 +-0.00934676 0.00881372 0.0064038 -0.0082985 -0.00368064 0.00105433 +-0.00707307 -0.00478192 -0.00936201 0.00405569 -0.00815587 0.00590702 +-0.0107118 -0.00414202 0.00129476 0.00625843 0.00708817 0.0054154 0.00530941 +0.000686702 -0.0106288 0.00251357 0.00831386 -0.0108688 0.00298791 +0.00872527 0.00928518 0.000660167 -0.00553394 0.00158073 -0.0036277 +0.0017622 -0.00660237 0.0109083 -0.0127224 -0.00382097 -0.00891224 +0.0110275 0.0100457 -0.00135313 -0.00250879 0.00347453 0.000713521 +-0.00983129 0.0128053 0.000837871 0.00540863 0.0090991 -0.00641546 +-0.00803903 0.0127052 -0.00890005 -0.008448 -0.00922506 -0.0121532 +0.000358595 0.00348523 -0.0111269 0.000438879 0.00638975 -0.00432599 +-0.00877099 -0.00935755 -0.000134803 -0.00361586 0.00705568 0.0105808 +0.0113129 0.00499092 -0.00251181 0.00523848 0.0115313 -0.00318519 0.00407405 +-0.0109854 -0.00614844 -0.00453025 0.0089713 -0.0103979 0.010858 -0.0100695 +0.00126864 0.0119713 -0.00331934 -0.00578554 -0.00136575 -0.00253582 +-0.0111106 0.00226965 0.00179003 -0.00458614 0.0117681 0.0105192 0.0045464 +0.0111329 -0.0066591 0.00975511 0.00949084 -0.00389633 0.000969593 +-0.00484972 0.00156428 -0.00125597 0.0010522 -0.00630323 -0.000666371 +-0.00256996 0.00967127 -0.00931685 -0.0070897 -0.00863617 0.00973146 +-0.00679495 0.00664627 -0.0107553 -0.00678334 -0.0073555 0.0028328 +-0.0074993 0.00785706 -0.00794663 0.00244377 -0.00361091 0.000499738 +0.00385415 0.000715035 0.00828348 -0.00761224 -0.00390454 0.00554149 +-0.00884904 0.00354493 -0.00581734 -0.0106556 0.00757721 0.00798714 +-0.00755903 0.00646172 -0.00789588 0.00880257 -0.00193197 -0.00252052 +-0.00298339 0.00424432 0.00086599 0.00810739 0.000173593 0.00510825 +0.00520783 0.00614126 0.00229457 -0.0094382 -0.0110126 -0.00254995 +0.00511274 0.0032377 -0.00947284 -0.0102886 0.00671566 0.00548167 -0.00991932 +0.00653304 -0.00841475 0.00744598 0.00753517 -0.00215317 0.0023745 +0.00123881 -0.0033708 -0.00351567 0.00961403 0.0104291 -0.00437929 +-0.00453368 -0.0049478 -0.00677792 -0.0106788 0.00571421 0.00553373 +0.00995161 0.00452391 -0.0103609 0.00876115 0.00880707 0.00649518 -0.00757657 +0.00184018 0.00330433 0.00409766 0.000993472 0.00603217 -0.00238106 +-0.000301685 0.000982104 -0.00612623 0.00295712 -0.00203754 -0.00456782 +0.000256376 -0.00358335 0.00918037 0.00737128 -0.00227146 0.00995883 +0.0062105 0.00528483 -0.00353867 -0.00375995 0.000460811 -0.000427725 +-0.00698899 0.00947917 0.00855573 -0.00130174 -0.00316505 0.000626231 +-0.00513888 -0.00794333 -0.00959825 0.00693421 -0.00817165 -0.00135494 +0.00588952 -0.000103875 -0.0085644 -0.000652357 -0.00495887 0.00198118 +; +#A 6000 -0.00570322 -0.00447865 -0.0043397 0.00652218 -0.00709481 -0.00838182 +-0.00793983 0.0035901 0.00945395 0.00290804 -0.00921651 -0.00967486 +-0.00919485 0.0093202 -0.00847386 0.00520904 -0.00660879 -0.00674357 +-0.00707267 -0.00795935 0.00954667 0.000196531 -0.00664793 5.74777e-05 +0.00606852 -0.00875444 0.00599406 -0.000125537 -0.00514972 -0.00875745 +-0.00737619 -0.00460677 0.00150842 0.00925627 0.00289913 0.00440645 +-0.00733838 0.00418025 0.00337703 0.00701451 0.00722648 0.00593873 +0.00678984 -0.00619318 -0.00100098 -0.00474514 0.00641145 -0.00153918 +-0.00501351 -0.0043192 0.000429743 0.00470691 0.00422804 0.00152915 +-0.00747768 0.0077937 -0.00156794 0.00428469 0.00609792 0.00547062 +-0.00205094 0.00447308 0.0027717 -0.00618855 0.00547681 -0.00850097 +-0.00238274 0.00370864 -0.00846104 0.000512816 0.00451144 -0.00268473 +0.00116592 -0.0067849 -0.00324647 0.00397147 0.00355538 -0.00425668 +0.00640954 0.00806337 0.007616 0.00678378 0.00437298 0.00352057 -0.006564 +0.000978523 0.00790908 -0.00168019 -0.00107751 0.00631138 0.00599533 +0.00578724 0.0081389 -0.00752588 0.00408646 0.0059702 -0.0054637 -0.00858825 +-0.00579754 -0.00145522 -0.0073227 -0.00470899 0.00728165 0.0069051 +-0.00730967 -0.00150545 0.00647672 0.00149735 0.00366194 -0.00838924 +-0.000374832 -0.00122974 -0.00731579 -0.00652773 -0.00759172 -0.00685793 +0.00603223 0.00265052 0.00575305 -0.00446075 -0.00101701 0.00467671 +0.005519 -0.00811778 -0.00163843 -0.000343813 -0.00452201 0.00595735 +-0.00785912 0.00016791 0.0045331 0.000481177 -0.00136025 0.000680868 +0.0051469 -0.00276325 -0.000745286 0.000772739 -0.00742422 0.00293254 +-0.00128592 -0.000688605 -0.00713458 0.00600986 -0.00106583 -0.00715026 +0.0025631 -0.00646056 0.00171886 -0.00601867 0.00612158 0.00322696 +0.00740005 0.00550956 0.00453673 0.00392505 -0.0061616 -0.000516313 +0.00761124 0.00392338 0.00186975 -0.00529232 0.00698131 0.00337108 +-0.0040963 -0.00451536 -0.00721366 -0.0012427 0.00409687 -0.00179516 +-0.00328285 0.00647386 0.003664 0.00153735 0.00707133 -0.00245462 0.0051299 +0.00481272 0.00493074 0.00580417 -0.00691799 -0.00490422 -0.00475159 +-0.00589517 0.00110445 -0.00124221 0.00294809 -0.000484902 0.000277398 +0.00015137 0.00562472 -0.00666164 -0.00332831 0.000899421 -0.0012883 +0.00213544 0.00309042 0.00677626 -0.00448499 0.00687569 -0.00655839 +0.00404458 -0.00577648 -0.00404707 0.00140575 -0.00126649 0.000812072 +0.00533673 -0.00620354 4.41353e-05 0.00401003 0.00170354 0.0049924 +-0.00645399 0.00519603 0.0035215 0.00442806 0.00494526 0.000681385 +0.0012084 -0.00633715 -0.00586083 0.00375201 -0.00262531 -0.00291554 +-0.00264985 0.00583282 0.00677645 -0.00692467 0.000267408 0.00579844 +0.00368968 -0.00177472 0.0010855 0.00679995 0.000122758 0.00583166 +0.00523548 -0.0041251 -2.53327e-05 0.00616941 -0.00384253 0.00354661 +-0.000392576 0.00257688 0.00658872 -0.00653203 0.00548864 -0.00377223 +-0.000187408 -0.0023093 0.000236237 -0.00479687 0.00247366 0.000144412 +-0.00570199 0.00637643 -0.00640608 -0.00424227 -0.00142989 -0.00252244 +0.00163066 0.00398428 0.00137108 0.00362175 0.00194547 -0.0010796 0.00256626 +0.00176679 0.0062276 -0.00309467 -0.00293094 -0.00320228 -0.00555314 +-0.00649318 0.00144863 -0.00331446 -0.00402584 0.0037118 0.00483936 +-0.00169543 0.00254426 -0.00604689 0.00237577 -0.00366 0.00351545 0.0061645 +0.00492222 0.00146122 -0.00256746 0.00594143 0.000650396 0.00374092 +0.00631955 -0.000428623 -0.00280288 -0.00249915 0.00425296 0.0048905 +0.00247389 0.00207205 0.00223507 -0.00491864 -0.00316483 0.00378491 +-0.00406631 0.00316984 -0.00367661 -0.00375972 0.0051286 -0.00294593 +0.00556332 0.00364787 0.00407355 0.00173862 3.28866e-05 0.00232997 +0.00416101 -0.00566787 -0.00271189 0.000217296 0.00296157 0.0060023 +-0.00457923 0.00159063 -0.00148797 0.000351654 0.000998788 -0.00582986 +-0.00592717 0.00459883 -0.000770127 0.0052337 0.00567257 -0.0048552 +-0.000597726 -0.0013158 0.00139299 -0.00296905 -0.000961222 -0.00334943 +-0.00139248 0.000758566 -0.000819108 -0.00519409 -0.00295937 -0.00411034 +-0.00126598 0.00575326 -0.00155944 0.000455269 0.00346974 0.00559425 +0.00534368 -0.00560721 0.00312315 -0.00572429 -0.000124678 0.00115189 +-0.00216995 0.00521385 -0.00561396 0.0044913 0.00371405 -0.00133451 +0.00392491 0.000914768 0.0048232 0.00351704 0.000169633 0.00249119 +-0.000865149 0.00532587 0.00358741 0.00342586 0.00113506 0.00218809 +-0.00224852 0.000403272 0.00294683 0.00063136 0.00360218 -0.00158013 +0.00543662 -0.00200175 0.000709361 0.00276262 -0.00357119 -0.00461073 +-0.00470699 -0.0022236 -0.00269078 -0.00338843 0.00209679 -0.000959598 +0.00313796 0.0044886 -0.00243988 0.00469972 0.00242487 0.00401584 0.00500083 +-0.000891066 -0.00122546 -0.00359965 -0.000344482 -0.00415781 0.0027435 +-0.00237994 -0.00169673 0.0031223 -0.00470681 0.00314136 0.00217102 +-0.00157792 -0.000949771 0.00324864 -0.00359902 0.00473037 0.00502376 +-0.00480421 0.00346058 -0.00283585 -0.00306908 0.00252832 0.00435907 +0.00424503 -0.00257584 -0.000241485 -0.00274146 0.000318125 0.00392117 +-0.00118808 -0.00412203 0.0006699 -0.000286332 -0.00063445 0.000472918 +0.000689999 -0.00299858 -0.0016545 0.00224191 0.00417085 0.0015336 +-0.00342328 -0.000118605 -0.00118747 0.000777475 0.00271026 -0.00166069 +-0.00132269 0.00378446 -0.00439403 0.000324111 -0.0048448 0.00435902 +0.00187618 0.000572443 0.00388358 -0.00376661 0.0046025 0.00192439 +0.00208894 -0.00043276 -0.00354637 0.00456001 -0.000825786 0.00334023 +-0.000142944 -0.0019605 -0.00176253 -0.00274092 -0.000667061 0.00296384 +0.00367993 -0.00465371 -0.00430577 0.00136595 -0.00174363 -0.00416508 +5.4845e-05 0.00190514 0.00194718 0.000377468 -0.001856 0.00354122 -0.00238809 +-0.00188939 -0.00387527 -0.000494484 0.00325548 -0.0018559 -0.00132489 +0.00150993 0.00329367 -0.000278264 0.00375311 0.00218339 -0.00275456 +0.001742 0.00429865 0.00387615 -0.000439828 -0.00370054 -0.00346178 +0.00410798 0.00178555 8.5822e-05 0.00339224 0.00145151 -0.00429751 +-0.00115119 -0.00172806 0.00335812 0.00205153 0.000996019 0.00398642 +0.00106922 0.000467772 -0.00411921 0.00384463 -0.000496191 -0.00199914 +0.00195315 0.000226245 -0.00336411 -0.00143821 0.00405345 0.00040218 +-0.000116104 -0.00300518 -0.00283273 0.000828467 0.00169684 -0.00341477 +-0.00321241 0.00360331 0.000191778 -0.00137282 0.000789467 -0.00321108 +-0.00397042 -0.00133701 -0.00353439 -0.000264215 -0.000250179 -0.00267769 +0.00227221 -0.00244035 -0.000185492 0.00046219 0.00355101 -0.00121823 +-0.000776099 0.00100131 -0.00146032 -0.000632884 -0.0040171 -0.000120965 +-0.00390938 0.00258878 -0.00147856 7.27925e-05 -0.000523017 -0.00387894 +0.00259002 -0.00112165 0.00081854 -0.00051505 0.00277914 0.00224479 +0.00137916 -0.00270149 -0.002342 -0.00267588 0.00163964 -0.0015441 +-0.00336015 0.00210629 0.00150747 -0.00225274 -0.0024877 0.00278617 +0.00244658 -0.00119675 -0.00239757 -0.000679584 0.00377146 0.00356494 +-0.00125804 0.00142345 0.00100273 0.000310673 -0.00123811 0.000158328 +0.00127412 0.0030484 0.00027143 -0.00107729 0.00248735 -0.00239672 +-0.0014675 -0.0034669 -0.00246139 -0.000478933 0.00134645 -0.00122935 +0.00235249 -0.00289891 -0.00156293 -0.00177095 -0.003396 -0.00253654 +-0.000311373 -0.00306275 -0.000249744 0.00346336 0.00107112 -0.00274107 +0.0011735 -0.00298394 -0.00299706 -0.00142962 0.00264445 3.7643e-05 +0.00109791 -0.000570788 -0.00329633 0.00316035 -0.00308219 -0.00211852 +-0.00283544 0.00150027 -0.00186509 -0.00298058 -3.8477e-05 -0.000860678 +0.00309285 0.00158349 0.00309149 -0.00221238 0.00159396 -0.000843301 +-0.000199285 -0.00200043 -0.00313551 0.00224219 0.00118295 -0.00137142 +0.000953036 -0.00177081 -0.00171165 0.00139588 -0.00184153 0.0012838 +0.00181769 0.000104944 -0.000851724 -0.000374557 0.00137421 0.00208226 +0.000945936 -0.00330075 0.00129221 0.000573518 -0.00330378 0.00260766 +-0.002838 -0.000613219 -0.000219534 -0.00194837 0.000851609 0.00213776 +-0.00324207 0.00238679 0.00107862 0.000354471 0.00109193 0.00139112 +-0.00173112 -0.000888298 -0.00308811 -0.00155819 0.00106979 0.0016091 +0.00159336 -0.00179553 -0.000787975 -0.000806378 0.00063396 0.00209535 +0.00216238 -0.00201451 -1.67794e-05 0.00238587 0.00258593 -0.000931098 +0.00284618 -0.000117558 -0.00116463 0.00279147 0.00143573 0.000761398 +-0.000503515 -0.000948251 0.00129045 -0.000223791 -0.00128649 -0.000827047 +-0.00266098 -0.000856781 0.00263298 -0.00172005 0.00085221 0.000962359 +0.00203107 -0.0020965 0.000777521 -0.00151143 0.00137948 0.00224661 +-0.000354447 0.00190892 0.000702389 0.00132761 0.00213337 0.00261426 +-0.00264768 0.000330986 -0.00023868 0.00188377 0.000817171 -0.000376495 +-0.00161819 0.00204246 0.00203329 -0.0026721 -0.000235097 0.00233353 +-0.0028177 0.00179812 0.00260218 -0.000739494 0.000428464 0.00233469 +-0.000783066 0.00247251 0.00100424 0.0018425 0.00195536 -0.00201084 +0.00212107 0.00184687 0.00278345 0.000845881 -0.00167152 -0.00208996 +0.00257876 -0.00106471 -0.000587303 0.00140029 0.00198946 0.00223463 +-0.00015454 -0.0011717 -0.000472182 0.001378 -0.000142248 -0.00161436 +0.00191329 0.00233531 -4.13618e-05 -0.00225598 -0.00226086 -0.000732662 +0.00238388 -3.53509e-06 -0.00246556 0.000409025 -0.00209033 0.001095 +-0.000610658 -0.00123896 0.00189721 -0.00245098 -0.000620009 0.000315553 +0.0013178 -0.00233828 -0.00238781 -0.00215948 -0.00134533 -2.24758e-05 +0.000113663 0.00115464 -0.00141208 0.00218523 0.00147756 -0.00158325 +0.00166478 -0.00182054 3.5271e-06 -0.00109895 -0.000463907 -0.000817356 +-0.00170237 0.00225851 0.00170723 -0.00234207 0.000100658 -0.00214875 +-0.00229243 0.001074 -0.00138498 0.00236444 0.00109029 -0.0010582 0.000948999 +0.00139785 -0.000255612 -0.00154754 -0.000902163 -0.000556932 0.00184524 +-0.000818614 0.0014175 -0.001147 -0.000879508 0.00137127 0.00157677 +-0.00227442 -0.000213276 -0.00163455 -0.00235069 0.000914303 -0.000359532 +0.00123966 0.00204608 0.00115316 -0.00209813 0.000266484 0.000787913 +0.00185387 -0.000490972 0.00130654 -0.000763627 0.000687359 1.25636e-05 +-0.000517927 -0.00210868 0.000302149 -0.000221433 -0.00139145 -0.00218493 +-0.000786313 0.000499234 0.00140311 -0.00210649 3.17324e-05 -0.00149887 +-0.000949377 -0.00217184 -0.00170018 0.00178524 0.000209359 0.00209031 +0.00178385 -0.00129121 0.000139166 -0.00162974 -0.00060624 -0.000557949 +-0.00162694 -0.000707867 0.000242797 -0.00177361 0.00142123 0.000909407 +0.000589972 -0.00108638 -0.001541 0.000119615 -0.00154313 0.00184791 +0.00112397 -0.000481904 -0.00203236 0.000932752 -6.22393e-05 0.000403429 +-0.000214537 -0.00129623 0.00150692 0.00135973 -0.000668023 0.000859076 +0.000477253 -0.00205027 0.000620383 -0.000298067 0.00131581 -9.81897e-05 +-0.000357981 0.000391007 0.00120418 -0.000479092 0.000118652 -0.00183203 +0.0011365 -0.000703926 -0.000782721 0.00201164 -0.00060997 -0.00095725 +0.000978817 -0.00176144 0.000256378 0.000577638 0.000324133 1.59867e-05 +0.00160444 0.00132522 -0.00166645 0.001214 0.00166469 0.000941659 0.000189783 +-0.000329214 0.000621588 0.000827563 0.000667328 0.00097043 0.00116145 +0.000785249 4.30932e-05 5.21686e-05 0.000412219 0.000602401 -0.000733841 +-0.00120154 0.000249634 -0.00127267 -0.00180589 0.00113257 0.00115229 +-0.000576841 0.000447163 0.0018513 -0.000842885 -0.00175455 -0.00139878 +-0.00090474 0.000459078 -0.00142743 -0.000454167 -0.000222927 0.00150268 +-0.000933776 0.000395572 0.000256062 0.00175047 0.000725543 0.000754875 +0.00124936 0.000557209 0.000163629 -0.000817999 0.00149572 0.000422363 +-0.00169798 -0.000436914 -0.000310488 -0.0013734 -0.00105209 -0.00125445 +0.000686591 -0.000624771 0.00134761 -0.0017261 0.00144715 0.000225461 +0.000898026 0.000874913 -0.000806741 -0.00106018 0.000942372 -0.000554013 +-7.91525e-06 -0.000867468 0.00105901 -0.000392938 0.000726409 0.00130337 +0.000244898 -3.74816e-06 -0.000388736 0.000184777 0.000765299 -0.000649227 +0.000357297; +#A 7000 0.0012492 -0.000575012 -0.000898908 0.000507421 -0.000530798 +-0.000259931 -0.00151475 0.000737702 0.000613408 0.00158958 -0.00118669 +0.0015686 -0.00123311 -0.001357 0.00029626 0.00104943 -0.00109924 -0.00100317 +0.00142512 -0.000305563 -0.000475551 0.00135078 0.000744428 -0.000338464 +0.000532713 0.00135782 0.000868392 -0.00146866 0.000550816 0.0015088 +-0.000846424 -0.000401221 -0.00019781 -0.000220583 -0.000470368 0.00100168 +-0.000986546 0.000920071 -0.00132245 0.00131788 0.00064037 0.000788796 +-0.000758939 -0.000382906 0.000309443 -0.000870563 0.00074417 -0.000779842 +-0.00127626 0.00057363 -0.000889073 0.000219084 0.000446521 -0.00125235 +9.01408e-05 -0.00103675 0.000389459 -0.000313182 -0.000615406 -0.00015187 +-0.000870292 -0.00129548 0.000424396 0.00142679 -0.000447372 -0.000900836 +-0.000787204 0.00099431 0.000140848 -0.000485013 0.000252497 -0.000374513 +-0.000863164 -0.000540191 0.00023615 -0.000714745 0.000558057 -0.000323393 +-0.000441217 0.000784675 -4.65611e-05 0.000436985 -0.00116446 -0.0001948 +0.000213646 0.000608115 0.00035096 3.90493e-05 -0.00113403 0.000135148 +0.000705914 -0.000505814 -0.000555664 0.000386704 -0.000838822 -0.000561424 +0.000400031 -0.000138427 -0.00040852 0.000369891 -0.000300845 0.00124515 +0.00124346 -0.00113911 0.00111082 0.000594973 -0.000300892 0.000686361 +-0.0010648 0.000853163 -6.13605e-05 0.000673992 0.00113989 -0.000162426 +0.000163353 -0.000293628 0.000136755 -0.000341238 0.000993567 -0.00113639 +-0.000481713 -0.00120794 0.00110377 -0.000529109 -0.000900797 1.5097e-05 +-0.000127802 -0.00115169 -0.000218883 -0.00103647 -0.000729499 -0.000933569 +0.000261304 0.000553128 0.000213879 -0.00104661 0.000533644 -0.000868625 +0.000911986 -0.00092741 -0.000160334 0.000682107 -0.000541971 -7.53034e-05 +-0.00114301 -0.000283223 0.000369455 0.000836565 -0.00115323 -6.13803e-05 +-0.000710245 -0.000505833 0.000271918 -0.000249941 0.000159092 -0.00104976 +0.000924776 -0.000313533 -0.00101767 -0.00109038 0.000389106 0.000954921 +-0.00049903 -0.000687481 -0.00079854 0.000145733 0.000642144 -0.000180584 +-0.000277334 0.0002971 -0.000401817 -0.000123326 -0.00018055 -4.79884e-05 +0.000738632 -0.000676492 -0.000579566 0.000748011 -0.000341441 -0.000497692 +-0.000307388 6.95357e-05 -0.000244494 0.000563768 -0.000399399 -0.000456226 +-0.000262401 -0.000539637 0.000579934 0.000935327 0.000232443 -0.000948325 +-2.87749e-05 0.000719733 -0.000900581 0.000606823 0.000864087 -6.92021e-05 +0.000901744 -0.000684915 0.000382314 -0.000354214 0.000875534 0.000880776 +0.000439515 -0.00073796 -0.000421234 -0.000559352 -0.000690283 -0.00062318 +0.000211343 -0.000923636 -0.000920695 -0.000947497 -0.000324575 -0.000912157 +0.000376783 -0.000387742 -0.000774662 0.000123788 0.000820491 0.000936377 +0.000456949 0.000784013 0.000777128 0.000380906 -0.000855015 0.000631465 +0.000680243 -0.00016551 -0.000182981 -0.000283614 -7.74131e-05 -0.000339954 +0.000856157 0.000464451 -0.0009205 0.000906736 0.00044987 0.000660678 +-0.000310299 0.000487073 -0.000114541 0.000136953 -5.9995e-05 -0.00014513 +0.000737664 0.000257715 -0.00080071 -0.000816176 -1.94711e-05 0.000297526 +3.97128e-05 -0.000519886 -0.000813488 -0.000192749 0.000842487 -0.0002868 +0.000398808 -0.000481032 0.000677423 -0.000200971 7.96434e-05 -0.000845284 +-1.42636e-05 0.000376014 0.000234714 -0.000763005 0.000789758 -0.000396797 +-0.000329816 -0.000188165 -0.000317305 0.000726605 0.000548254 -0.000327887 +-0.000709808 -0.000484459 0.000769154 -0.000625539 0.000344775 -0.000619264 +-0.000376633 -0.000460527 0.000411514 -0.000244047 -0.000583738 -0.000335371 +0.00041205 0.000190481 0.00012176 0.000637337 0.000695486 -0.000219423 +0.000365849 -0.000479682 0.000137039 0.00020266 -0.000463569 -0.000750459 +-0.000381625 -0.000461828 -0.000631848 -0.00060664 0.000232222 -0.000714649 +0.000397486 0.000222135 -0.00032225 0.000570012 -0.000208637 -0.000725021 +0.000678173 -0.000540412 -0.000469693 0.000594229 0.000426519 -0.000538308 +0.000223535 -0.000137773 -0.000316593 -0.00015623 -0.000610216 0.000381392 +0.00061934 -0.00025272 -0.000268581 0.000656806 6.27917e-05 -0.000500579 +0.000587874 0.000462338 0.000101547 -0.000673198 -0.000395233 -0.000264257 +0.000558283 -7.40567e-05 -0.000394004 -0.000691442 4.78703e-05 0.00054017 +0.000667208 0.000540232 -0.000595821 0.000286323 0.000664962 -0.000199572 +0.000407903 -0.000261271 -0.000442182 3.44015e-05 0.000173264 3.26499e-05 +0.000340138 0.000313123 0.000372136 -0.000322517 0.00022914 -0.000253731 +-0.000447886 -0.000126551 0.000626085 0.000149804 0.000101168 0.000622597 +0.00039729 -0.000268301 0.000120118 1.50889e-05 -0.000378856 0.000413486 +-0.000342796 0.00029533 0.000209729 -0.00031269 -0.000144468 -0.000102416 +-0.000147359 -0.00028676 0.000584347 0.000108544 -0.000202493 -7.51208e-05 +0.000403579 0.000447199 -0.000548961 0.000288714 -9.09286e-05 -0.000441917 +-0.000418663 -0.000218049 -0.000306548 -2.17395e-05 0.000176577 8.58264e-05 +0.000542075 -0.000277782 0.000535511 -0.000187838 -0.000236575 0.000101605 +0.000237291 -6.59155e-06 0.000367821 0.000453996 -0.000245949 0.000197307 +-0.000358722 0.000447421 -0.00041882 -0.000214713 -3.92954e-05 0.000231444 +0.000279601 0.000503509 0.000487381 -0.000268749 -1.41e-05 0.000205976 +0.000329102 0.000497112 -0.000403776 -0.00052477 0.000106153 -7.88035e-06 +-0.000369373 0.000395796 -0.000139955 -0.000391764 0.000296226 0.000271513 +7.23289e-05 -0.000509181 0.000207145 -5.47508e-05 0.000215143 0.000361323 +0.000226735 0.000185898 0.000299066 0.000227878 0.000499131 -0.000370339 +-2.75462e-05 -0.000115399 -0.000502344 0.000341239 0.000509725 8.26888e-05 +3.69382e-05 -2.25344e-06 0.000312896 0.000163926 0.000477555 -3.13345e-05 +-0.000490836 4.24753e-05 0.000262056 0.000151496 1.16089e-05 0.000317891 +-0.000109386 0.000308685 0.00043373 -0.00030428 -0.000320058 -0.00038599 +-0.000171142 -0.000418772 0.000291421 0.000302665 -2.95393e-05 1.26319e-05 +0.000137193 -6.00689e-05 -0.00031629 -0.000117911 0.000239614 0.000368158 +-0.000399459 0.000161575 0.000175609 -0.000374141 -9.84947e-05 -0.000213919 +-0.000428891 0.000174801 -0.000189702 0.000214115 0.000165268 -0.000349396 +-0.000405665 3.95643e-05 0.00036534 0.000289016 0.000424982 -6.46746e-05 +-0.000332357 0.000326202 -0.000347566 -0.000397012 -6.96946e-05 0.000115071 +3.94671e-05 0.000328449 0.000323533 0.000304188 0.00018308 -9.26968e-05 +7.13173e-05 0.000359726 -0.000247005 -8.64855e-05 -5.32104e-05 -9.01422e-05 +-2.14043e-05 0.000199606 0.000142187 0.000196057 -0.000214303 -0.000261724 +-0.000275583 -7.52304e-05 0.000126259 3.01654e-05 -4.09653e-05 -0.0003402 +-0.000218268 -0.000320716 2.88781e-05 -0.000256556 -2.60203e-05 -0.000189933 +-5.74624e-05 0.000132393 -0.000144382 -5.66651e-05 -6.79256e-05 -0.000332045 +-0.000154313 -0.000254363 -0.000296142 0.000167059 -3.51242e-05 7.95371e-05 +-0.000177711 -0.000144392 0.000358404 -0.000325194 -0.000178367 0.00011174 +0.000114395 0.000353344 -4.52515e-05 0.000152097 -0.000356767 -0.000340855 +-0.000275549 0.000260527 -0.000189885 4.07865e-05 -7.10681e-05 -4.75349e-05 +0.000243042 -0.000221257 0.000132443 -2.22106e-05 -0.000296696 0.000178845 +0.000340916 0.000172121 -0.000280522 -4.32924e-05 0.000312616 -0.000296574 +0.000248021 -0.000235786 0.000110128 0.000176364 0.000222532 -0.000188694 +-0.000228089 -1.8564e-05 -0.000107123 -0.000173131 0.000165302 -0.000210595 +0.000190611 -0.000158425 -0.000302273 -1.9037e-05 3.78133e-05 -0.000219932 +0.000131112 -0.000281152 9.74466e-05 -0.000119311 -0.000275698 4.63384e-05 +-0.000230743 -1.70803e-05 -9.66521e-05 3.54906e-05 -0.000138785 0.000265031 +0.00013758 0.000161817 -9.01403e-06 0.000243307 -0.000232444 0.000101935 +0.000275709 -0.000190156 0.000139153 -0.000151913 -0.000242767 -0.000258583 +-9.71673e-05 0.000290766 9.92376e-05 -3.16694e-05 -0.000110656 -0.000174381 +0.000141272 -0.000138564 -3.78255e-05 -1.28841e-05 -9.9798e-05 -0.000220305 +-4.35099e-05 1.51792e-05 0.000160573 -0.000177594 -0.000156793 -0.000186564 +-0.000266483 -7.12576e-05 -0.00025858 5.47798e-05 -7.04945e-05 0.000106298 +-0.000206712 0.000242848 -0.000117685 0.000237174 -8.5087e-05 -0.00025921 +0.000115376 3.29665e-05 -3.51605e-05 -9.79168e-05 -9.33544e-05 0.000170928 +-0.000231284 -8.21348e-05 -8.11348e-05 -0.000146722 4.11026e-05 -0.000204514 +-0.000109212 -0.000218314 6.33194e-05 0.000187675 -8.45559e-05 -2.93489e-06 +-7.4673e-05 -0.000128661 1.08752e-06 -1.2751e-06 -3.47991e-06 -6.38608e-05 +3.5126e-05 -4.96448e-05 -0.000166491 8.91011e-06 0.000112424 -1.49576e-05 +-7.11332e-05 0.00015326 -0.000231573 0.000159096 -0.000102849 -8.83628e-05 +-3.44492e-05 6.08733e-05 -5.24769e-05 -0.000143917 0.000187676 -5.48234e-05 +-0.000169366 -6.924e-05 0.000208597 7.43959e-05 1.51495e-05 -0.000156248 +-0.000189901 -0.00021846 -1.09017e-05 -2.10567e-05 0.000175068 -0.000203148 +9.6554e-05 0.000159488 -0.000157061 0.000157146 9.29294e-05 -8.68819e-05 +-0.000112576 0.000106051 -0.000159277 8.87658e-05 0.000117173 0.000207073 +-0.000159477 -0.00014425 6.50592e-05 -0.000169995 -3.47183e-05 -0.000191218 +0.000199124 -0.000158299 -0.000173895 5.56455e-05 0.000109783 -4.95583e-05 +-0.00019452 0.000162531 -7.30231e-05 -6.51151e-05 -6.5513e-05 -1.30406e-05 +-4.58004e-05 8.54845e-05 -6.62585e-05 0.000147404 -0.000145886 0.000171048 +-8.13935e-05 -0.000112742 8.18382e-05 9.87108e-05 -0.000178329 8.30383e-05 +0.000118243 -0.000133737 -0.000117509 -0.000181216 6.96005e-05 -2.5578e-05 +-8.87828e-05 -0.000119761 -0.000131815 9.39839e-05 -3.85206e-05 -3.98037e-05 +-0.000123752 6.5694e-05 0.000149544 6.55084e-05 -5.10189e-05 -0.000147475 +5.61899e-05 0.000156118 -0.000126318 -7.61452e-05 0.000146521 -9.81166e-05 +2.3322e-05 1.48155e-06 -4.83064e-05 -0.000116114 -0.000133376 -3.8507e-06 +-2.81958e-05 0.000132099 0.000141073 -3.98404e-05 6.84192e-05 -0.000148495 +-9.63587e-05 0.000123971 -0.000153369 0.000123925 0.000126407 5.96334e-05 +-0.00013141 -0.000151332 6.38976e-06 -0.000132509 -0.000113432 -0.000145522 +-2.72324e-06 0.000103609 -9.12737e-05 2.333e-05 -5.32228e-05 -1.80584e-05 +-0.000108868 4.33863e-05 1.05692e-05 -3.24529e-05 -2.547e-05 -0.000127644 +-5.51754e-05 0.000118803 4.58581e-05 -6.0435e-05 0.000119945 9.03633e-05 +0.000126189 -2.16762e-05 0.000103534 5.26705e-05 9.06114e-05 -3.96244e-06 +9.18588e-05 -6.99231e-05 -0.000102175 0.000121435 -5.29731e-05 -0.000130497 +7.07592e-07 -6.53253e-06 -0.000126898 -7.27657e-05 4.9602e-05 -0.000130346 +-9.72919e-05 0.000115102 1.65862e-05 0.000124706 -0.000111513 -1.01902e-05 +0.00011511 9.17382e-05 -5.68378e-05 -0.000126589 -9.65907e-05 0.000109071 +1.98354e-05 1.44711e-05 -9.53789e-05 -4.40881e-05 -3.42756e-05 -0.000107171 +6.77947e-05 -6.02567e-05 -4.51936e-06 7.07596e-05 5.11669e-06 1.96312e-05 +0.000103474 -0.000117026 9.32659e-05 1.71592e-05 -5.50648e-05 8.14844e-05 +8.30488e-05 9.60546e-05 5.34437e-05 1.59611e-07 7.36206e-05 -0.000113025 +-6.21388e-05 1.59049e-05 -1.24152e-05 -1.14204e-05 9.41162e-05 5.53836e-05 +-7.5127e-05 8.12193e-05 4.72129e-05 4.56104e-05 -6.3318e-06 8.70641e-05 +-2.9712e-05 -5.41445e-05 0.000105252 -3.76891e-06 -2.06443e-05 3.80059e-05 +-5.28402e-05 -3.03088e-05 6.83216e-05 2.58535e-06 -6.68118e-05 7.39135e-05 +5.81208e-07 -3.86402e-05 -9.29886e-06 9.32456e-05 -3.96077e-05 7.14271e-05 +5.64583e-06 2.07722e-06 -8.81567e-05 1.48119e-05 -2.04169e-05 4.94373e-05 +-6.21602e-05 -6.99812e-05 -6.81391e-05 -6.67656e-05 -6.97088e-05 -2.29791e-05 +-4.80091e-05 -2.99185e-05 7.93086e-06 -6.4468e-06 1.68672e-05 -5.89997e-06 +-6.48934e-05 -4.2006e-05 -3.71554e-05 3.15824e-05 -1.4117e-05 -8.54198e-05 +-5.2555e-05 6.81312e-05 -8.00106e-05 -5.03327e-05 -4.99049e-05 5.6397e-05 +-8.34014e-05 4.20525e-05 -3.50847e-05 -3.44716e-05 1.595e-05 -2.8145e-05 +-3.57833e-05 3.28588e-05 7.61727e-05 -6.03767e-05 -1.1149e-05 4.99157e-05 +1.97055e-05 2.67875e-05 2.76247e-05 4.69502e-05 1.2949e-05 7.13521e-05 +2.82482e-05 3.18771e-07 -3.82229e-05 6.32702e-05 2.32495e-05 7.1777e-05 +-5.64882e-05 -7.52744e-05 5.21801e-05 -4.66259e-05 -4.72077e-05 -5.04802e-05 +5.51556e-05 -4.92359e-05 -6.65992e-05 5.69698e-05 3.37395e-05 -5.03714e-05 +5.93517e-05 2.79149e-05 1.50739e-05 -4.38056e-05 -4.2024e-05 3.20716e-05 +-1.51792e-05 5.43174e-05 6.80207e-05 2.4926e-05 6.80454e-05 -8.69103e-06 +-4.71735e-05 5.8643e-05 -1.73492e-05 5.06138e-05 -2.80768e-05 6.04457e-05 +-2.56288e-05 1.8836e-05 -1.48352e-05 5.89033e-05 5.97622e-05 -2.3729e-05 +-3.43449e-05 3.39459e-05 -4.18459e-05 1.94012e-05 9.52488e-06 -5.98462e-05 +-5.52232e-06 4.58803e-05 -5.51445e-05 2.25818e-06 4.16403e-05 -4.15755e-05 +3.94566e-05 4.77493e-05 -1.37609e-05 -6.95325e-06; +#X coords 0 1 7999 -1 100 70 1; +#X restore 237 208 graph; +#N canvas 512 387 458 308 makeglitch 0; +#X obj 87 124 noise~; +#X obj 166 125 line~; +#X msg 169 69 1; +#X msg 234 76 0 200; +#X obj 163 163 *~; +#X obj 95 204 *~; +#X obj 95 245 tabwrite~ rtrig_buffa; +#X obj 172 30 t b b b; +#X obj 136 32 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 52 48 inlet; +#X obj 164 187 *~; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 4 1; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 10 0; +#X connect 4 0 10 1; +#X connect 5 0 6 0; +#X connect 7 0 6 0; +#X connect 7 1 3 0; +#X connect 7 2 2 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 10 0 5 1; +#X restore 105 292 pd makeglitch; +#X obj 42 177 player~ rtrig_buffa 1 4; +#X obj 42 262 *~ 0.1; +#X obj 42 291 dac~; +#X obj 200 171 sig~ 1; +#X obj 42 154 rtrig~ 0.1 1 1e-05; +#X obj 78 220 hsl 128 8 0 1 0 0 empty empty gain -2 -8 0 8 -223855 +-1 -1 0 1; +#X floatatom 75 232 5 0 0 0 - - -, f 5; +#X obj 45 84 hsl 128 8 0 0.001 0 0 rtrig-odds empty odds -2 -8 0 8 +-223855 -1 -1 0 1; +#X obj 26 10 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 28 43 rtrig~ - generates random click triggers; +#X obj 105 267 loadbang; +#X text 160 149 args: min gain \, max gain \, per-sample event odds +; +#X connect 0 0 1 0; +#X connect 1 0 9 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 6 0 7 1; +#X connect 8 0 5 1; +#X connect 9 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 6 1; +#X connect 15 0 4 0; diff --git a/externals/lyonpotpourri/rtrig~.c b/externals/lyonpotpourri/rtrig~.c new file mode 100755 index 000000000..3604cb4dc --- /dev/null +++ b/externals/lyonpotpourri/rtrig~.c @@ -0,0 +1,145 @@ +#include "MSPd.h" + +static t_class *rtrig_class; + +#define OBJECT_NAME "rtrig~" + +#define MAXFLAMS (16) +#define MAXATTACKS (128) +#define STOPGAIN (.001) + +#define RAND_MAX2 (0x7fffffff) + +typedef struct +{ + int attack_count; // number of triggers per flam event + float *attack_times; // trigger times in seconds + int *attack_points; // trigger times in samples + int fdex; // current flam + float gainatten; // attenuation factor + float amp; // current amp + int atks;// number of attacks per flam + long counter; // internal clock + short active; // flag that flam is turned on + + +} t_flam; + +typedef struct _rtrig +{ + + t_object x_obj; + float x_f; + short mute; + float min; + float max; + float odds; + +} t_rtrig; + + +void *rtrig_new(t_symbol *s, int argc, t_atom *argv); +t_int *rtrig_perform(t_int *w); +void rtrig_dsp(t_rtrig *x, t_signal **sp); +void rtrig_free(t_rtrig *x); +void rtrig_mute(t_rtrig *x, t_floatarg tog); +void rtrig_min(t_rtrig *x, t_floatarg v); +void rtrig_max(t_rtrig *x, t_floatarg v); +void rtrig_odds(t_rtrig *x, t_floatarg v); + + +void rtrig_tilde_setup(void) +{ + rtrig_class = class_new(gensym("rtrig~"),(t_newmethod)rtrig_new,(t_method)rtrig_free, sizeof(t_rtrig), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(rtrig_class,t_rtrig, x_f ); + + class_addmethod(rtrig_class,(t_method)rtrig_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(rtrig_class,(t_method)rtrig_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(rtrig_class,(t_method)rtrig_min,gensym("min"),A_FLOAT,0); + class_addmethod(rtrig_class,(t_method)rtrig_max,gensym("max"),A_FLOAT,0); + class_addmethod(rtrig_class,(t_method)rtrig_odds,gensym("odds"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void rtrig_mute(t_rtrig *x, t_floatarg tog) +{ + x->mute = (short) tog; +} + +void rtrig_min(t_rtrig *x, t_floatarg v) +{ + x->min = (float) v; +} + +void rtrig_max(t_rtrig *x, t_floatarg v) +{ + x->max = (float) v; +} + +void rtrig_odds(t_rtrig *x, t_floatarg v) +{ + x->odds = (float) v; +} + + +void *rtrig_new(t_symbol *s, int argc, t_atom *argv) +{ + + t_rtrig *x = (t_rtrig *)pd_new(rtrig_class); + outlet_new(&x->x_obj, gensym("signal")); + x->mute = 0; + x->min = atom_getfloatarg(0,argc,argv); + x->max = atom_getfloatarg(1,argc,argv); + x->odds = atom_getfloatarg(2,argc,argv); + + srand(time(0)); + return (x); +} + + + +void rtrig_free(t_rtrig *x) +{ +} + +t_int *rtrig_perform(t_int *w) +{ + + t_rtrig *x = (t_rtrig *) (w[1]); + float *out_vec = (t_float *)(w[2]); + int n = (int) w[3]; + + float rval; + float min = x->min; + float max = x->max; + float odds = x->odds; + + if(x->mute){ + memset( (void *)out_vec, 0, n * sizeof(float) ); + return (w+4); + } + + while( n-- ){ + rval = (float) rand() / (float) RAND_MAX2; + if(rval < odds){ + rval = min + (max-min) * ((float) rand() / (float) RAND_MAX2); + *out_vec++ = rval; + } else { + *out_vec++ = 0.0; + } + } + + + return (w+4); +} + +void rtrig_dsp(t_rtrig *x, t_signal **sp) +{ + + dsp_add(rtrig_perform, 3, x, + // sp[0]->s_vec, + sp[1]->s_vec, + sp[0]->s_n + ); +} + diff --git a/externals/lyonpotpourri/samm~-help.pd b/externals/lyonpotpourri/samm~-help.pd new file mode 100755 index 000000000..150455784 --- /dev/null +++ b/externals/lyonpotpourri/samm~-help.pd @@ -0,0 +1,200 @@ +#N canvas 1227 671 555 539 10; +#X obj 42 295 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 78 80 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 42 254 click2bang~; +#X obj 134 313 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 134 282 click2bang~; +#X obj 245 339 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 245 290 click2bang~; +#X obj 116 467 *~ 0.1; +#X obj 116 497 dac~; +#X floatatom 320 454 5 0 0 0 - - -, f 5; +#N canvas 547 354 816 547 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X msg 211 191 2 50 50 50; +#X obj 94 178 osc~ 322; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 1 0; +#X restore 180 394 pd toner; +#N canvas 547 354 820 551 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X msg 211 191 2 50 50 50; +#X obj 94 178 osc~ 444; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 1 0; +#X restore 244 394 pd toner; +#N canvas 547 354 828 559 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X msg 211 191 2 50 50 50; +#X obj 94 178 osc~ 670; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 1 0; +#X restore 374 393 pd toner; +#N canvas 452 295 832 563 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X msg 211 191 2 50 50 50; +#X obj 94 178 osc~ 190; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 1 0; +#X restore 116 394 pd toner; +#N canvas 547 354 828 559 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X obj 94 178 osc~ 976; +#X msg 211 191 2 50 50 200; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 6 0; +#X connect 4 0 0 0; +#X connect 5 0 1 0; +#X connect 6 0 0 0; +#X restore 436 393 pd toner; +#X obj 140 183 samm~ 20 5 7 11 13 19 1; +#N canvas 460 303 824 555 toner 0; +#X obj 211 218 adsr~; +#X obj 94 286 *~; +#X obj 210 154 loadbang; +#X obj 115 347 outlet~; +#X obj 169 100 inlet~; +#X msg 211 191 2 50 50 50; +#X obj 94 179 osc~ 555; +#X connect 0 0 1 1; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 1 0; +#X restore 309 393 pd toner; +#X obj 163 362 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 163 313 click2bang~; +#X obj 345 372 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 345 310 click2bang~; +#X obj 441 340 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 441 291 click2bang~; +#X obj 140 153 r samm-msgs; +#N canvas 0 22 574 436 operation 0; +#X obj 127 186 s samm-msgs; +#X msg 109 134 tempo \$1; +#X floatatom 109 105 5 0 0 0 - - -, f 5; +#X msg 109 79 20; +#X msg 215 112 arm; +#X msg 253 115 resume; +#X msg 313 115 pause; +#X msg 34 107 beatinfo; +#X msg 250 210 mute \$1; +#X obj 251 174 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 8 0; +#X restore 375 98 pd operation; +#X obj 323 448 hsl 80 8 0 0.25 0 0 empty empty gain -2 -8 0 8 -141498 +-1 -1 0 1; +#X text 312 187 args: tempo \, [beat subdivisions]*; +#N canvas 639 436 544 322 specs 0; +#X obj 48 283 s samm-msgs; +#X msg 90 71 divbeats 1 19 13 11 7 5; +#X msg 102 116 msbeats 250 450 333 1600 777 630; +#X msg 48 30 beats 0.1 0.2 0.333 0.25 0.4 0.5; +#X msg 98 162 ratiobeats 1 12 1 16 1 9 1 7 3 32 5.5 11; +#X text 46 9 specify each tempo with its time interval in beats; +#X text 91 53 specify each tempo as a subdivision of a beat (quarter +note); +#X text 108 96 specify each tempo with time interval in ms.; +#X text 107 142 specify each tempo as a ratio (relative to a whole +note); +#X msg 106 205 sampbeats 44100 22050 11025 88200 6677 9313; +#X text 131 185 specify each tempo in samples; +#X msg 157 243 beatinfo; +#X text 155 227 diagnostics; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 9 0 0 0; +#X connect 11 0 0 0; +#X restore 375 123 pd specs; +#X text 99 80 reinit timer; +#X obj 9 12 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 11 46 samm~ - sample accurate multiple metronomes; +#X obj 78 103 click~; +#X connect 1 0 31 0; +#X connect 2 0 0 0; +#X connect 4 0 3 0; +#X connect 6 0 5 0; +#X connect 7 0 8 0; +#X connect 7 0 8 1; +#X connect 9 0 7 1; +#X connect 10 0 7 0; +#X connect 11 0 7 0; +#X connect 12 0 7 0; +#X connect 13 0 7 0; +#X connect 14 0 7 0; +#X connect 15 0 2 0; +#X connect 15 0 13 0; +#X connect 15 1 4 0; +#X connect 15 1 10 0; +#X connect 15 2 11 0; +#X connect 15 2 18 0; +#X connect 15 3 16 0; +#X connect 15 3 6 0; +#X connect 15 4 12 0; +#X connect 15 4 20 0; +#X connect 15 5 14 0; +#X connect 15 5 22 0; +#X connect 16 0 7 0; +#X connect 18 0 17 0; +#X connect 20 0 19 0; +#X connect 22 0 21 0; +#X connect 23 0 15 0; +#X connect 25 0 9 0; +#X connect 31 0 15 0; diff --git a/externals/lyonpotpourri/samm~.c b/externals/lyonpotpourri/samm~.c new file mode 100755 index 000000000..0e8d0788a --- /dev/null +++ b/externals/lyonpotpourri/samm~.c @@ -0,0 +1,431 @@ +#include "MSPd.h" + + +static t_class *samm_class; + +#define MAXBEATS (256) +#define OBJECT_NAME "samm~" +// #define DATE "prerelease" + +typedef struct _samm +{ + t_object x_obj; + float x_f; + double tempo; /* current tempo */ + double onebeat_samps; /* number of samples for a single beat */ + double *beats; /* amount of beats for each active tempo outlet */ + double *metro_samps;/* number of samples to count down for each time interval */ + double *metro_beatdurs;/* number of beats for each metro time interval */ + double *metro;/* current countdown for each time interval */ + int metro_count; /* number of metronomes to keep track of */ + float sr; /* current sampling rate */ + short pause; + short mute; + // Pd only */ + float *trigger_vec; + short vs; +} t_samm; + +void *samm_new(t_symbol *msg, short argc, t_atom *argv); +void *samm_beatlist(t_samm *x, t_symbol *msg, short argc, t_atom *argv); +t_int *samm_perform(t_int *w); +void samm_dsp(t_samm *x, t_signal **sp); +void samm_tempo(t_samm *x, t_floatarg f); +void samm_divbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv); +void samm_msbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv); +void samm_sampbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv); +void samm_ratiobeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv); +void samm_free(t_samm *x); +void samm_beatinfo(t_samm *x); +void samm_init(t_samm *x,short initialized); +void samm_mute(t_samm *x, t_floatarg f); +void samm_pause(t_samm *x); +void samm_arm(t_samm *x); +void samm_resume(t_samm *x); +void samm_beats(t_samm *x, t_symbol *msg, short argc, t_atom *argv); + + +void samm_beatinfo(t_samm *x) +{ + int i; + post("tempo %.10f",x->tempo); + post("samples in one beat: %.10f",x->onebeat_samps); + for(i = 0; i < x->metro_count; i++){ + post("%d: relative duration %.10f, samples %.10f samples ratio to 1 beat: %.10f", i, + x->metro_beatdurs[i], x->metro_samps[i], x->onebeat_samps / x->metro_samps[i] ); + } +} + +void samm_tilde_setup(void){ + samm_class = class_new(gensym("samm~"), (t_newmethod)samm_new, + (t_method)samm_free,sizeof(t_samm), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(samm_class, t_samm, x_f); + class_addmethod(samm_class,(t_method)samm_dsp,gensym("dsp"),0); + class_addmethod(samm_class,(t_method)samm_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(samm_class,(t_method)samm_tempo,gensym("tempo"),A_FLOAT,0); + class_addmethod(samm_class,(t_method)samm_beatinfo,gensym("beatinfo"),0); + class_addmethod(samm_class,(t_method)samm_beats,gensym("beats"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_divbeats,gensym("divbeats"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_msbeats,gensym("msbeats"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_sampbeats,gensym("sampbeats"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_ratiobeats,gensym("ratiobeats"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_pause,gensym("pause"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_arm,gensym("arm"),A_GIMME,0); + class_addmethod(samm_class,(t_method)samm_resume,gensym("resume"),A_GIMME,0); + potpourri_announce(OBJECT_NAME); +} + + + +void samm_pause(t_samm *x) +{ + x->pause = 1; +} + +void samm_mute(t_samm *x, t_floatarg f) +{ + x->mute = (short) f; +} + +void samm_arm(t_samm *x) +{ + int i; + + x->pause = 1; + for( i = 0; i < x->metro_count; i++){ + x->metro[i] = 1.0; + } + +} + +void samm_resume(t_samm *x) +{ + x->pause = 0; +} + +void samm_beats(t_samm *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + double beatdur; + + if(argc != x->metro_count){ + error("%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); + return; + } + + for(i = 0; i < argc; i++){ + beatdur = (double)atom_getfloatarg(i,argc,argv); + if(!beatdur){ + error("%s: zero divisor given for beat stream %d",OBJECT_NAME,i+1); + beatdur = 1.0; + } + + x->metro_beatdurs[i] = beatdur; + x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; + x->metro[i] = 1.0; // initialize for instantaneous beat + } +} + +void samm_divbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + double divisor; + + if(argc != x->metro_count){ + error("%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); + return; + } + + for(i = 0; i < argc; i++){ + divisor = (double)atom_getfloatarg(i,argc,argv); + if(!divisor){ + error("%s: zero divisor given for beat stream %d",OBJECT_NAME,i+1); + divisor = 1.0; + } + + x->metro_beatdurs[i] = 1.0 / divisor; // argument is now DIVISOR of beat + x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; + x->metro[i] = 1.0; // initialize for instantaneous beat + } +} + +void samm_msbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + double msecs; + if(argc != x->metro_count){ + error("%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); + return; + } + for(i = 0; i < argc; i++){ + msecs = (double)atom_getfloatarg(i,argc,argv); + if(msecs <= 0){ + error("%s: illegal duration for beat stream %d",OBJECT_NAME,i+1); + msecs = 1000.0; + } + x->metro_samps[i] = x->sr * .001 * msecs; + x->metro_beatdurs[i] = x->metro_samps[i] / x->onebeat_samps; // just in case tempo changes + x->metro[i] = 1.0; // initialize for instantaneous beat + } + +} + +void samm_sampbeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i; + double samples; + if(argc != x->metro_count){ + error("%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); + return; + } + for(i = 0; i < argc; i++){ + samples = (double)atom_getfloatarg(i,argc,argv); + if(samples <= 0){ + error("%s: illegal duration for beat stream %d",OBJECT_NAME,i+1); + samples = x->sr; + } + x->metro_samps[i] = samples; + x->metro_beatdurs[i] = x->metro_samps[i] / x->onebeat_samps; // just in case tempo changes + x->metro[i] = 1.0; // initialize for instantaneous beat + } +} + +void samm_ratiobeats(t_samm *x, t_symbol *msg, short argc, t_atom *argv) +{ + int i,j; + double num,denom; + + if(argc != x->metro_count * 2){ + error("%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); + return; + } + + for(i = 0, j= 0; i < argc; i += 2, j++){ + num = (double)atom_getfloatarg(i,argc,argv); + denom = (double)atom_getfloatarg(i+1,argc,argv); + if(!denom){ + error("%s: zero divisor given for beat stream %d",OBJECT_NAME,(i/2)+1); + denom = 1.0; + } + + x->metro_beatdurs[j] = 4.0 * (num / denom); + // post("beat duration %f",4.0 * (num/denom)); + x->metro_samps[j] = x->metro_beatdurs[j] * x->onebeat_samps; + x->metro[j] = 1.0; // initialize for instantaneous beat + } +} + +void samm_tempo(t_samm *x, t_floatarg f) +{ + int i; + double last_tempo; + double tempo_fac; + + if( f <= 0.0) { + error("illegal tempo: %f", f); + return; + } + last_tempo = x->tempo; + x->tempo = f; + tempo_fac = last_tempo / x->tempo; // shrink or stretch factor for beats + x->onebeat_samps = (60.0/x->tempo) * x->sr; + for(i = 0; i < x->metro_count; i++){ + x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; + x->metro[i] *= tempo_fac; + } +} + + +void *samm_new(t_symbol *msg, short argc, t_atom *argv) +{ + int i,j, default_tempo = 120; + double divisor; + t_samm *x; + t_atom sane_defaults[2]; + + if(argc < 2){ + // If no args, set some sane defaults + if (!argc){ + post("%s: warning: no tempo or beat streams provided: setting " + "tempo to 120 BPM and 1 stream to '1'",OBJECT_NAME); + SETFLOAT(sane_defaults, default_tempo); + SETFLOAT(sane_defaults+1, 1.); + argc = 2; + argv = sane_defaults; + } + else + { + error("%s: there must be at least 1 beat stream",OBJECT_NAME); + return (void *)NULL; + } + } + if(argc > MAXBEATS + 1) + { + error("%s: exceeded maximum of %d beat values",OBJECT_NAME, MAXBEATS); + return (void *)NULL; + } + + x = (t_samm *)pd_new(samm_class); + x->metro_count = argc - 1; + for(i=0;i< x->metro_count;i++) + outlet_new(&x->x_obj, gensym("signal")); + x->sr = sys_getsr(); + x->vs = sys_getblksize(); + + x->pause = 0; + x->mute = 0; + + x->beats = (double *) calloc(x->metro_count, sizeof(double)); + x->metro_samps = (double *) calloc(x->metro_count, sizeof(double)); + x->metro_beatdurs = (double *) calloc(x->metro_count, sizeof(double)); + x->metro = (double *) calloc(x->metro_count, sizeof(double)); + + if(! x->sr ){ + x->sr = 44100; + post("sr autoset to 44100"); + } + + if(argc > 0) { + x->tempo = (double) atom_getfloatarg(0,argc,argv); + } + + if( x->tempo <= 0.0 ){ + x->tempo = default_tempo; + post("tempo autoset to %d BPM", default_tempo); + } + + x->onebeat_samps = (60.0/x->tempo) * x->sr; + + + + + for(i = 1,j = 0; i < argc; i++, j++){ + divisor = (double)atom_getfloatarg(i,argc,argv); + if(!divisor){ + error("%s: zero divisor given for beat stream %d",OBJECT_NAME,i); + divisor = 1.0; + } + + x->metro_beatdurs[j] = 1.0 / divisor; // argument is now DIVISOR of beat + x->metro_samps[j] = x->metro_beatdurs[j] * x->onebeat_samps; + x->metro[j] = 1.0; // initialize for instantaneous beat + + } + // post("there are %d beat streams",x->metro_count); + samm_init(x,0); + + return (x); +} + +void samm_free(t_samm *x) +{ + free(x->trigger_vec); + free(x->beats); + free(x->metro_samps); + free(x->metro_beatdurs); + free(x->metro); + +} +void samm_init(t_samm *x,short initialized) +{ + if(!initialized){ + x->trigger_vec = (float*)calloc(x->vs, sizeof(float)); + + + } else { + x->trigger_vec = (float*) realloc(x->trigger_vec,x->vs*sizeof(float)); + } +} + + +t_int *samm_perform(t_int *w) +{ + int i, j, k; + // float outval; + t_samm *x = (t_samm *) (w[1]); + t_float *inlet = (t_float *) (w[2]); + t_float *beat_outlet; + + int n; + + int metro_count = x->metro_count; + double *metro = x->metro; + float *trigger_vec = x->trigger_vec; + short pause = x->pause; + + n = (int) w[metro_count + 3]; + + if(x->mute){ + for(i = 0, j=3; i < metro_count; i++, j++){ + beat_outlet = (t_float *) (w[j]); + for(k=0; k < n; k++){ + beat_outlet[k] = 0.0; // use memset + } + } + return (w + metro_count + 4); + } + /* main loop */ + for(i=0;i<n;i++) + trigger_vec[i] = inlet[i]; + + for(i = 0, j=3; i < metro_count; i++, j++){ + beat_outlet = (t_float *) (w[j]); + for(k = 0; k < n; k++){ + if(trigger_vec[k]) { + metro[i] = 1.0; // instant reset from an impulse + } + + beat_outlet[k] = 0.0; + if(! pause ){ + metro[i] -= 1.0; + if( metro[i] <= 0){ + beat_outlet[k] = 1.0; + metro[i] += x->metro_samps[i]; + } + } + } + } + + return (w + metro_count + 4); +} + + +void samm_dsp(t_samm *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count; + + pointer_count = x->metro_count + 3; // all metros, plus 1 inlet, plus the object pointer, plus N + + if(x->vs != sp[0]->s_n){ + x->vs = sp[0]->s_n; + samm_init(x,1); + } + if(x->sr != sp[0]->s_sr) { + x->sr = sp[0]->s_sr; + x->onebeat_samps = (60.0/x->tempo) * x->sr; + for(i = 0; i < x->metro_count; i++){ + x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; + x->metro[i] = 0; + } + } + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + // post("attached %d pointers",pointer_count); + + dsp_addv(samm_perform, pointer_count, (t_int *) sigvec); + + free(sigvec); + +} + diff --git a/externals/lyonpotpourri/sarec~-help.pd b/externals/lyonpotpourri/sarec~-help.pd new file mode 100755 index 000000000..7fff63368 --- /dev/null +++ b/externals/lyonpotpourri/sarec~-help.pd @@ -0,0 +1,110 @@ +#N canvas 635 332 566 425 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array track1 100000 float 2; +#X coords 0 1 99999 -1 200 100 1; +#X restore 17 111 graph; +#X obj 156 301 sarec~ track1 1; +#X obj 258 240 noise~; +#X obj 258 269 *~ 0.1; +#X obj 156 232 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 156 349 5 0 0 0 - - -, f 5; +#X obj 18 12 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X floatatom 423 364 5 0 0 0 - - -, f 5; +#X obj 426 351 hsl 100 10 0 0.25 0 0 empty empty gain -2 -8 0 10 -141498 +-1 -1 0 1; +#X msg 376 294 \; track1 const 0; +#X text 374 279 clear track; +#X text 256 224 input signal; +#X text 25 233 trigger record ->; +#X obj 349 351 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 379 193 s sarec.messages; +#X obj 24 260 r sarec.messages; +#X obj 227 122 vradio 15 1 0 4 empty empty record_mode 0 -8 0 10 -204800 +-4160 -1 1; +#X text 245 121 record; +#X text 245 138 overdub; +#X text 246 153 punch; +#X text 245 169 lock track; +#X obj 156 263 click~; +#N canvas 310 149 450 300 status-messages 0; +#X msg 88 133 overdub; +#X msg 147 133 punch; +#X msg 37 133 record; +#X msg 192 134 lock; +#X obj 90 68 sel 0 1 2 3; +#X obj 48 213 s sarec.messages; +#X obj 81 28 inlet; +#X connect 0 0 5 0; +#X connect 1 0 5 0; +#X connect 2 0 5 0; +#X connect 3 0 5 0; +#X connect 4 0 2 0; +#X connect 4 1 0 0; +#X connect 4 2 1 0; +#X connect 4 3 3 0; +#X connect 6 0 4 0; +#X restore 227 193 pd status-messages; +#X msg 379 174 punchfade \$1; +#X msg 379 150 5; +#X msg 409 150 50; +#X msg 438 150 150; +#X text 376 132 set taper for punch mode; +#N canvas 149 234 450 300 show-record-phase 0; +#X obj 53 132 snapshot~; +#X msg 179 95 1; +#X obj 179 116 metro 50; +#X obj 179 76 loadbang; +#X text 94 154 record phase; +#X obj 53 60 inlet~; +#X obj 53 199 outlet; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 5 0 0 0; +#X restore 156 324 pd show-record-phase; +#N canvas 144 388 450 300 set-record-region 0; +#X obj 37 199 s sarec.messages; +#X msg 49 120 region 500 1000; +#X msg 37 93 region 0 0; +#X text 40 75 set region to entire array (default); +#X text 167 120 select region within array (ms.); +#X msg 61 159 region 0 1500; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 5 0 0 0; +#X restore 379 103 pd set-record-region; +#N canvas 115 280 450 300 playback 0; +#X obj 42 205 *~ 0.1; +#X obj 42 235 dac~; +#X obj 42 178 tabplay~ track1; +#X obj 179 67 inlet; +#X obj 44 74 inlet; +#X connect 0 0 1 0; +#X connect 0 0 1 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 4 0 2 0; +#X restore 349 383 pd playback; +#X text 216 351 play back track ->; +#X text 380 81 select region; +#X text 20 47 sarec~ - sample-accurate recording unit. This object +could provide the basis for a multi-track recording system.; +#X connect 1 0 28 0; +#X connect 2 0 3 0; +#X connect 3 0 1 1; +#X connect 4 0 21 0; +#X connect 7 0 30 1; +#X connect 8 0 7 0; +#X connect 13 0 30 0; +#X connect 15 0 1 0; +#X connect 16 0 22 0; +#X connect 21 0 1 0; +#X connect 23 0 14 0; +#X connect 24 0 23 0; +#X connect 25 0 23 0; +#X connect 26 0 23 0; +#X connect 28 0 5 0; diff --git a/externals/lyonpotpourri/sarec~.c b/externals/lyonpotpourri/sarec~.c new file mode 100755 index 000000000..a07a87719 --- /dev/null +++ b/externals/lyonpotpourri/sarec~.c @@ -0,0 +1,400 @@ +#include "MSPd.h" + +static t_class *sarec_class; + +#define MAXBEATS (256) +#define OBJECT_NAME "sarec~" +#define SAREC_RECORD 1 +#define SAREC_OVERDUB 2 +#define SAREC_PUNCH 3 +#define SAREC_LOCK 4 + +// update time in samples +#define WAVEFORM_UPDATE (22050) + +typedef struct _sarec +{ + t_object x_obj; + t_float x_f; + long b_valid; + long b_frames; + t_word *b_samples; + long display_counter; + int valid; // status of recording buffer (not yet implemented) + int status; // idle? 0, recording? 1 + int mode; // record, overdub or punch + int overdub; // 0 ? write over track, 1: overdub into track + int *armed_chans; // 1, armed, 0, protected + long counter; // sample counter + float sync; // position in recording + long start_frame; // start time in samples + long end_frame; // end time in samples + long fadesamps; // number of samples for fades on PUNCH mode + long regionsamps; // use for fade + int channel_count; // number of channels (hopefully!) in buffer + float sr; + float syncphase; + t_symbol *bufname; // name of recording buffer + t_garray *recbuf; +} t_sarec; + + +void *sarec_new(t_symbol *bufname); + +// void sarec_region(t_sarec *x, t_symbol *msg, short argc, t_atom *argv); +void sarec_regionsamps(t_sarec *x, t_floatarg start_frame, t_floatarg end_frame); +void sarec_region(t_sarec *x, t_floatarg start_time, t_floatarg end_time); + +t_int *sarec_perform(t_int *w); +void sarec_dsp(t_sarec *x, t_signal **sp); + + +void sarec_arm(t_sarec *x, t_floatarg chan); +void sarec_disarm(t_sarec *x, t_floatarg chan); +void sarec_attach_buffer(t_sarec *x); +void sarec_overdub(t_sarec *x); +void sarec_record(t_sarec *x); +void sarec_punch(t_sarec *x); +void sarec_punchfade(t_sarec *x, t_floatarg fadetime); +void sarec_tilde_setup(void); +void sarec_lock(t_sarec *x); + + +void sarec_tilde_setup(void) +{ + t_class *c; + c = class_new(gensym("sarec~"),(t_newmethod)sarec_new,0, sizeof(t_sarec),0, A_SYMBOL,0); + CLASS_MAINSIGNALIN(c,t_sarec,x_f); + class_addmethod(c,(t_method)sarec_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(c,(t_method)sarec_arm,gensym("arm"),A_FLOAT,0); + class_addmethod(c,(t_method)sarec_disarm,gensym("disarm"),A_FLOAT,0); + class_addmethod(c,(t_method)sarec_overdub,gensym("overdub"),0); + class_addmethod(c,(t_method)sarec_lock,gensym("lock"),0); + class_addmethod(c,(t_method)sarec_punch,gensym("punch"),0); + class_addmethod(c,(t_method)sarec_punchfade,gensym("punchfade"),A_FLOAT,0); + class_addmethod(c,(t_method)sarec_record,gensym("record"),0); + class_addmethod(c,(t_method)sarec_regionsamps,gensym("regionsamps"),A_FLOAT, A_FLOAT,0); + class_addmethod(c,(t_method)sarec_region,gensym("region"),A_FLOAT, A_FLOAT,0); + sarec_class = c; + potpourri_announce(OBJECT_NAME); +} + + +void sarec_lock(t_sarec *x) +{ + x->mode = SAREC_LOCK; +} + + +void *sarec_new(t_symbol *bufname) +{ + int i; + int chans; + + chans = 1; // mono processing only in Pd + + t_sarec *x = (t_sarec *)pd_new(sarec_class); + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + + + x->status = 0; + x->counter = 0; + x->b_valid = 0; + x->bufname = bufname; + x->channel_count = chans; + x->armed_chans = (int *) malloc(x->channel_count * sizeof(int)); + x->display_counter = 0; + x->start_frame = 0; + x->end_frame = 0; + x->overdub = 0; + x->mode = SAREC_RECORD; + x->sr = sys_getsr(); + x->fadesamps = x->sr * 0.05; // 50 ms fade time + x->start_frame = -1; // initialize to a bad value + x->end_frame = -1; + x->regionsamps = 0; + for(i = 0; i < x->channel_count; i++){ + x->armed_chans[i] = 1; // all channels armed by default + } + return x; +} + +t_int *sarec_perform(t_int *w) +{ + int i, j; + t_sarec *x = (t_sarec *) (w[1]); + t_float *click_inlet = (t_float *) (w[2]); + t_float *record_inlet; + t_float *sync; + t_int channel_count = x->channel_count; + int n; + int next_pointer = channel_count + 5; + int status = x->status; + int counter = x->counter; + int *armed_chans = x->armed_chans; + t_word *samples = x->b_samples; + long b_frames = x->b_frames; + long start_frame = x->start_frame; + long end_frame = x->end_frame; + long b_valid = x->b_valid; + //int overdub = x->overdub; + int mode = x->mode; + long fadesamps = x->fadesamps; + long regionsamps = x->regionsamps; + int clickval; + float frak; + float goin_up, goin_down; + long counter_msf; + sync = (t_float *) (w[3 + channel_count]); + n = (int) w[4 + channel_count]; + if(! b_valid) + goto escape; + if(! regionsamps ){ + x->regionsamps = regionsamps = end_frame - start_frame; + } + for(i = 0; i < n; i++){ + // could be record (1) or overdub (2) + if( click_inlet[i] ){ + clickval = (int) click_inlet[i]; + if(clickval == -2) { + status = 0; + counter = 0; + garray_redraw(x->recbuf); + } + else { + // arm all channels + if(clickval == -1) { + // just use all armed channels + } + // arm only one channel - protect against fatal bad index + else if(clickval <= channel_count && clickval > 0) { + for(j=0; j < channel_count; j++){ + armed_chans[j] = 0; + }; + armed_chans[clickval - 1] = 1; + // post("arming channel %d", clickval); + } + + counter = start_frame; + if(!end_frame){ + end_frame = b_frames; + } + status = 1; + } + + } + if(counter >= end_frame) { + counter = 0; + status = 0; + garray_redraw(x->recbuf); + } + // write over track + if(status && (mode == SAREC_RECORD) ){ + for(j=0; j < channel_count; j++){ + if( armed_chans[j] ){ + record_inlet = (t_float *) (w[3 + j]); + samples[ (counter * channel_count) + j].w_float = record_inlet[i]; + } + } + counter++; + } + // overdub + else if(status && (mode == SAREC_OVERDUB) ){ + for(j=0; j < channel_count; j++){ + if( armed_chans[j] ){ + record_inlet = (t_float *) (w[3 + j]); + samples[ (counter * channel_count) + j].w_float += record_inlet[i]; + } + } + counter++; + } + // punch + + else if(status && (mode == SAREC_PUNCH)) { + counter_msf = counter - start_frame; + for(j=0; j < channel_count; j++){ + if( armed_chans[j] ){ + record_inlet = (t_float *) (w[3 + j]); + // frak is multiplier for NEW STUFF, (1-frak) is MULTIPLIER for stuff to fade out + // do power fade though + + if( counter_msf < fadesamps ){ + + // fade in + frak = (float)counter_msf / (float)fadesamps; + goin_up = sin(PIOVERTWO * frak); + goin_down = cos(PIOVERTWO * frak); + //post("fadein: %d, up: %f, down: %f", counter_msf, goin_up, goin_down); + samples[ (counter * channel_count) + j].w_float = + (samples[ (counter * channel_count) + j].w_float * goin_down) + + (record_inlet[i] * goin_up); + } else if ( counter_msf >= (regionsamps - fadesamps) ){ + frak = (float) (regionsamps - counter_msf) / (float) fadesamps; + // fade out + + // frak = (float)counter_msf / (float)fadesamps; + goin_up = cos(PIOVERTWO * frak); + goin_down = sin(PIOVERTWO * frak); + //post("fadeout: %d, up: %f, down: %f", counter_msf, goin_up, goin_down); + samples[ (counter * channel_count) + j].w_float = + (samples[ (counter * channel_count) + j].w_float * goin_up) + + (record_inlet[i] * goin_down); + } else { + // straight replace + samples[ (counter * channel_count) + j].w_float = record_inlet[i]; + } + + } + } + counter++; + } + + sync[i] = (float) counter / (float) b_frames; + } + if(status){ + x->display_counter += n; + if(x->display_counter > WAVEFORM_UPDATE){ + garray_redraw(x->recbuf); + x->display_counter = 0; + } + } + x->end_frame = end_frame; + x->status = status; + x->counter = counter; +escape: + return w + next_pointer; +} + +void sarec_overdub(t_sarec *x) +{ + x->mode = SAREC_OVERDUB; +} + + +void sarec_record(t_sarec *x) +{ + x->mode = SAREC_RECORD; +} + +void sarec_punchfade(t_sarec *x, t_floatarg fadetime) +{ + x->fadesamps = x->sr * fadetime * 0.001; // read fade in ms. + //post("punch mode"); +} + +void sarec_punch(t_sarec *x) +{ + x->mode = SAREC_PUNCH; + // post("punch mode"); +} + +void sarec_disarm(t_sarec *x, t_floatarg chan) +{ + // int i; + int ichan = (int) chan; + if(chan <= x->channel_count && chan > 0) { + x->armed_chans[ichan - 1] = 0; + } +} + +void sarec_arm(t_sarec *x, t_floatarg chan) +{ + int i; + int ichan = (int) chan; + if(ichan == -1){ + for(i = 0; i < x->channel_count; i++){ + x->armed_chans[i] = 1; + } + } else if(ichan == 0) + { + for(i = 0; i < x->channel_count; i++){ + x->armed_chans[i] = 0; + } + } else if(chan <= x->channel_count && chan > 0) { + x->armed_chans[ichan - 1] = 1; + } +} + + +void sarec_region(t_sarec *x, t_floatarg start_time, t_floatarg end_time) +{ + long b_frames = x->b_frames; + long start_frame, end_frame; + float sr = x->sr; + // convert milliseconds to samples: + start_frame = (long) (sr * 0.001 * start_time ); + end_frame = (long) (sr * 0.001 * end_time ); + start_frame = start_frame < 0 || start_frame > b_frames - 1 ? 0 : start_frame; + end_frame = end_frame > b_frames ? b_frames : end_frame; + x->end_frame = end_frame; + x->start_frame = start_frame; + x->regionsamps = end_frame - start_frame; +} + +void sarec_regionsamps(t_sarec *x, t_floatarg start_frame, t_floatarg end_frame) +{ + long b_frames = x->b_frames; + // long start_frame, end_frame; + //start_frame = (long) atom_getfloatarg(0, argc, argv); + //end_frame = (long) atom_getfloatarg(1, argc, argv); + start_frame = start_frame < 0 || start_frame > b_frames - 1 ? 0 : start_frame; + end_frame = end_frame > b_frames ? b_frames : end_frame; + x->end_frame = (long)end_frame; + x->start_frame = (long)start_frame; + x->regionsamps = end_frame - start_frame; +} + + +void sarec_attach_buffer(t_sarec *x) +{ + t_garray *a; + t_symbol *bufname = x->bufname; + int b_frames; + float *b_samples = x->b_samples; + if (!(a = (t_garray *)pd_findbyclass(bufname, garray_class))) { + if (*bufname->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,bufname->s_name); + x->b_valid = 0; + } + else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", bufname->s_name,OBJECT_NAME); + x->b_valid = 0; + } + else { + x->recbuf = a; + x->b_valid = 1; // a->a_valid; ??? + x->b_frames = b_frames; + x->b_samples = b_samples; + garray_usedindsp(a); + } +} + +void sarec_dsp(t_sarec *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count; + pointer_count = x->channel_count + 4; + /* all channels, 1 inlet, 1 sync outlet, the object pointer, vector size N */ + + sarec_attach_buffer(x); + if( x->start_frame < 0 && x->end_frame < 0){ + x->start_frame = 0; + x->end_frame = x->b_frames; + } + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + x->sr = sp[0]->s_sr; + + dsp_addv(sarec_perform, pointer_count, (t_int *) sigvec); + free(sigvec); +} \ No newline at end of file diff --git a/externals/lyonpotpourri/sel~-help.pd b/externals/lyonpotpourri/sel~-help.pd new file mode 100755 index 000000000..320b382b1 --- /dev/null +++ b/externals/lyonpotpourri/sel~-help.pd @@ -0,0 +1,46 @@ +#N canvas 192 248 489 337 10; +#X obj 41 184 sel~ 1 2 5.5, f 27; +#X obj 41 226 click2bang~; +#X obj 120 227 click2bang~; +#X obj 200 225 click2bang~; +#X obj 41 87 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 41 269 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 120 268 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 200 266 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 114 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 114 142 *~ 2; +#X obj 268 88 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 41 125 click~; +#X obj 114 112 click~; +#X obj 268 126 click~; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 28 41 sel~ - sample-accurate implementation of the sel algorithm +; +#X text 281 224 impulses are numerically matched by sending a click +(impulse with value 1.0) to the appropriate outlet, f 31; +#X msg 312 99 set 5.5; +#X obj 312 70 loadbang; +#X connect 0 0 1 0; +#X connect 0 1 2 0; +#X connect 0 2 3 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 7 0; +#X connect 4 0 11 0; +#X connect 8 0 12 0; +#X connect 9 0 0 0; +#X connect 10 0 13 0; +#X connect 11 0 0 0; +#X connect 12 0 9 0; +#X connect 13 0 0 0; +#X connect 18 0 13 0; +#X connect 19 0 18 0; diff --git a/externals/lyonpotpourri/sel~.c b/externals/lyonpotpourri/sel~.c new file mode 100755 index 000000000..4e4eb73a9 --- /dev/null +++ b/externals/lyonpotpourri/sel~.c @@ -0,0 +1,178 @@ +#include "MSPd.h" + +static t_class *sel_class; + +#define MAXBEATS (256) +#define OBJECT_NAME "sel~" +#define COMPILE_DATE "9.02.07" +#define OBJECT_VERSION "2.01" +// #define DATE "prerelease" + +/* Pd version of sel~ */ + +typedef struct _sel +{ + t_object x_obj; + t_float x_f; + t_float *matches; // store numbers to match against + t_float *trigger_vec; // copy of input vector + t_int length; // number of matches to check + t_float **ins; // array of input signal vectors + t_float **outs; // array of output signal vectors +} t_sel; + +void *sel_new(t_symbol *msg, short argc, t_atom *argv); +void sel_free(t_sel *x); +void sel_dsp(t_sel *x, t_signal **sp); + + +void sel_tilde_setup(void){ + sel_class = class_new(gensym("sel~"), (t_newmethod)sel_new, + (t_method)sel_free, sizeof(t_sel),0,A_GIMME,0); + CLASS_MAINSIGNALIN(sel_class, t_sel, x_f); + class_addmethod(sel_class, (t_method)sel_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *sel_new(t_symbol *msg, short argc, t_atom *argv) +{ + int i; + + t_sel *x = (t_sel *)pd_new(sel_class); + x->length = (t_int)argc; + + for(i=0;i< x->length ;i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + + x->matches = (t_double *) malloc(x->length * sizeof(double)); + + for(i = 0; i < argc; i++){ + x->matches[i] = (double)atom_getfloatarg(i,argc,argv); + } + + x->ins = (t_float **) malloc(1 * sizeof(t_float *)); + x->outs = (t_float **) malloc(x->length * sizeof(t_float *)); + // only 1 inlet + for(i = 0; i < 1; i++){ + x->ins[i] = (t_float *) malloc(8192 * sizeof(t_float)); + } + return x; +} + +void sel_free(t_sel *x) +{ + free(x->matches); + free(x->outs); + free(x->ins[0]); + free(x->ins); +} + +t_int *sel_perform(t_int *w) +{ + int i, j; + t_sel *x = (t_sel *) w[1]; + t_float **ins = x->ins; + t_float **outs = x->outs; + t_float *invec; + t_float *inlet; + t_float *match_outlet; + t_float *matches = x->matches; + t_int length = x->length; + + int n = (int) w[length + 3]; // obj, func, 1 inlet + + // copy input vectors (just 1 here) + for(i = 0; i < 1; i++){ + invec = (t_float *) w[2 + i]; + for(j = 0; j < n; j++){ + ins[i][j] = invec[j]; + } + } + inlet = ins[0]; + // assign output vector pointers + for(i = 0; i < length; i++){ + outs[i] = (t_float *) w[3 + i]; + } + + // clean each outlet + for(j = 0; j < length; j++){ + match_outlet = (t_double *) outs[j]; + for(i = 0; i < n; i++){ + match_outlet[i] = 0.0; + } + } + // now match and route any clicks in the input + for(i = 0; i < n; i++){ + if(inlet[i]){ + for(j = 0; j < length; j++){ + if( inlet[i] == matches[j]){ + match_outlet = (t_double *) outs[j]; + match_outlet[i] = 1.0; // always send a unity click + } + } + } + } + return (w + length + 4); +} + +/* +void sel_perform64(t_sel *x, t_object *dsp64, double **ins, + long numins, double **outs,long numouts, long n, + long flags, void *userparam) +{ + int i, j; + t_double *inlet = ins[0]; + t_double *match_outlet; + t_double *matches = x->matches; + int length = x->length; + + // clean each outlet + for(j = 0; j < length; j++){ + match_outlet = (t_double *) outs[j]; + for(i = 0; i < n; i++){ + match_outlet[i] = 0.0; + } + } + // now match and route any clicks in the input + for(i = 0; i < n; i++){ + if(inlet[i]){ + for(j = 0; j < length; j++){ + if( inlet[i] == matches[j]){ + match_outlet = (t_double *) outs[j]; + match_outlet[i] = 1.0; // always send a unity click + } + } + } + } +} + + +t_int *sel_dsp64(t_sel *x, t_object *dsp64, short *count, double sr, long n, long flags) +{ + if(!sp[0]->s_sr) + return; + object_method(dsp64, gensym("dsp_add64"),x,sel_perform64,0,NULL); +} +*/ + +void sel_dsp(t_sel *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count = x->length + 3; // output chans + object + inchan + vectorsize + if(!sp[0]->s_sr){ + return; + } + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + dsp_addv(sel_perform, pointer_count, (t_int *)sigvec); + free(sigvec); +} diff --git a/externals/lyonpotpourri/shoehorn~-help.pd b/externals/lyonpotpourri/shoehorn~-help.pd new file mode 100755 index 000000000..33883d33e --- /dev/null +++ b/externals/lyonpotpourri/shoehorn~-help.pd @@ -0,0 +1,28 @@ +#N canvas 375 428 410 405 10; +#X obj 11 117 osc~ 340; +#X obj 11 283 *~ 0.01; +#X obj 87 285 *~ 0.01; +#X obj 11 338 dac~; +#X obj 48 168 osc~ 546; +#X obj 29 141 osc~ 739; +#X obj 11 246 shoehorn~ 5 2; +#X obj 67 193 osc~ 1666; +#X obj 86 216 osc~ 665; +#X text -2 47 shoehorn~ collapses an arbitrary number of input channels +into an arbitrary number of output channels \, by spacing them from +left to right with equal power panning.; +#X obj -3 9 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 153 250 hsl 128 15 0 0.15 0 0 empty empty gain -2 -8 0 10 -232576 +-1 -1 1300 1; +#X connect 0 0 6 0; +#X connect 1 0 3 0; +#X connect 2 0 3 1; +#X connect 4 0 6 2; +#X connect 5 0 6 1; +#X connect 6 0 1 0; +#X connect 6 1 2 0; +#X connect 7 0 6 3; +#X connect 8 0 6 4; +#X connect 11 0 2 1; +#X connect 11 0 1 1; diff --git a/externals/lyonpotpourri/shoehorn~.c b/externals/lyonpotpourri/shoehorn~.c new file mode 100755 index 000000000..4d8cd9b31 --- /dev/null +++ b/externals/lyonpotpourri/shoehorn~.c @@ -0,0 +1,174 @@ +#include "MSPd.h" + +static t_class *shoehorn_class; + +/* Pd version of shoehorn~ */ + +#define OBJECT_NAME "shoehorn~" + +typedef struct _shoehorn +{ + + t_object x_obj; + t_float x_f; + long inChans; + long outChans; + double pio2; + t_float *inarr; + t_float **loc_invecs; + t_float *outs; + double advFrac; + double *pangains1; + double *pangains2; + long *indexList; +} t_shoehorn; + +void *shoehorn_new(t_symbol *s, int argc, t_atom *argv); +void shoehorn_free(t_shoehorn *x); +void shoehorn_dsp(t_shoehorn *x, t_signal **sp); +t_int *shoehorn_perform(t_int *w); + +void shoehorn_tilde_setup(void){ + shoehorn_class = class_new(gensym("shoehorn~"), (t_newmethod)shoehorn_new, + (t_method)shoehorn_free, sizeof(t_shoehorn),0,A_GIMME,0); + CLASS_MAINSIGNALIN(shoehorn_class, t_shoehorn, x_f); + class_addmethod(shoehorn_class, (t_method)shoehorn_dsp, gensym("dsp"),0); + potpourri_announce(OBJECT_NAME); +} + +void *shoehorn_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + double fullFrac, thisFrac, panloc; + long outIndex; + t_shoehorn *x = (t_shoehorn *)pd_new(shoehorn_class); + x->inChans = (long) atom_getfloatarg(0,argc,argv); + x->outChans = (long) atom_getfloatarg(1,argc,argv); + if(x->inChans < 2){ + post("%s: warning: defaulting to 2 in channels", OBJECT_NAME); + x->inChans = 2; + } + if(x->outChans < 2){ + post("%s: warning: defaulting to 2 out channels", OBJECT_NAME); + x->outChans = 2; + } + for(i = 0; i < x->inChans - 1; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); + } + for(i=0; i < x->outChans; i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + x->pio2 = PI / 2.0; + + x->inarr = (t_float *) malloc(x->inChans * sizeof(t_float)); + x->loc_invecs = (t_float **) malloc(x->inChans * sizeof(t_float *)); + for(i = 0; i < x->inChans; i++){ + x->loc_invecs[i] = (t_float *) malloc(8192 * sizeof(t_float)); + } + x->pangains1 = (double *) malloc(x->inChans * sizeof(double)); + x->pangains2 = (double *) malloc(x->inChans * sizeof(double)); + x->indexList = (long *) malloc(x->inChans * sizeof(long)); + x->advFrac = (double)(x->outChans - 1)/(double)(x->inChans - 1); + x->outs = (t_float **) malloc(x->outChans * sizeof(t_float *)); // temporary holding for output vectors + + for(i = 1; i < x->inChans - 1; i++){ + fullFrac = i * x->advFrac; + outIndex = floor(fullFrac); + thisFrac = fullFrac - outIndex; + panloc = thisFrac * x->pio2; + x->indexList[i] = outIndex; + x->pangains1[i] = cos(panloc); + x->pangains2[i] = sin(panloc); + } + return x; +} + +void shoehorn_free(t_shoehorn *x) +{ + int i; + free(x->inarr); + free(x->pangains1); + free(x->pangains2); + free(x->indexList); + for(i = 0; i < x->inChans; i++){ + free(x->loc_invecs[i]); + } + free(x->loc_invecs); + free(x->outs); +} + + +t_int *shoehorn_perform(t_int *w) +{ + t_shoehorn *x = (t_shoehorn*) w[1]; + long inChans = x->inChans; + long outChans = x->outChans; + t_float *inarr = x->inarr; + t_float **loc_invecs = x->loc_invecs; + t_float *invec; + t_float **outs = x->outs; + double *pangains1 = x->pangains1; + double *pangains2 = x->pangains2; + int chan,i, j; + long outIndex; + long *indexList = x->indexList; + + int n = (int) w[inChans + outChans + 2]; + // assign output vector pointers + + for(i = 0; i < outChans; i++){ + outs[i] = (t_float *) w[2 + inChans + i]; + } + + // copy all input vectors to a local 2D array + for(i = 0; i < inChans; i++){ + invec = (t_float *) w[2 + i]; + for(j = 0; j < n; j++){ + loc_invecs[i][j] = invec[j]; + } + } + + for( j = 0; j < n; j++){ + // copy local input sample frame + for(chan = 0; chan < inChans; chan++){ + inarr[chan] = loc_invecs[chan][j]; + } + + // zero out output channels + for(chan = 1; chan < outChans - 1; chan++){ + outs[chan][j] = 0.0; + } + + // copy outer channel samples directly + + outs[0][j] = inarr[0]; + outs[outChans - 1][j] = inarr[inChans - 1]; + + // spread internal input channels to respective output channels + + for(chan = 1; chan < inChans - 1; chan++){ + outIndex = indexList[chan]; + outs[outIndex][j] += pangains1[chan] * inarr[chan]; + outs[outIndex+1][j] += pangains2[chan] * inarr[chan]; + } + } + return (w + inChans + outChans + 3); +} + +void shoehorn_dsp(t_shoehorn *x, t_signal **sp) +{ + long i; + t_int **sigvec; + int pointer_count = x->inChans + x->outChans + 2; + sigvec = (t_int **) calloc(pointer_count, sizeof(t_int *)); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + dsp_addv(shoehorn_perform, pointer_count, (t_int *)sigvec); + free(sigvec); +} diff --git a/externals/lyonpotpourri/sigseq~-help.pd b/externals/lyonpotpourri/sigseq~-help.pd new file mode 100755 index 000000000..b756c425d --- /dev/null +++ b/externals/lyonpotpourri/sigseq~-help.pd @@ -0,0 +1,83 @@ +#N canvas 133 217 352 325 10; +#X obj 20 126 sigseq~; +#X obj 113 155 bng 30 550 50 0 empty empty empty 0 -6 0 8 -260679 -51584 +-1; +#X obj 66 245 *~ 0.1; +#X obj 66 214 *~; +#X obj 66 283 dac~; +#X obj 20 175 osc~; +#N canvas 647 240 474 324 messages 0; +#X obj 133 195 outlet; +#N canvas 40 386 462 312 clock 0; +#X obj 141 124 outlet; +#X obj 45 212 send~ external_clock; +#X msg 45 148 tempo \$1; +#X floatatom 44 122 5 0 0 0 - - -, f 5; +#X obj 45 173 samm~ 60 0.25; +#X msg 141 98 external_clock \$1; +#X obj 141 51 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; +#X text 139 30 must toggle DACs before switch takes effect; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X restore 207 159 pd clock; +#X obj 205 234 outlet~; +#X obj 205 198 receive~ external_clock; +#N canvas 0 22 474 324 other-controls 0; +#X obj 24 181 outlet; +#X msg 24 65 banggate \$1; +#X obj 24 14 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 1 1; +#X text 66 27 open gate for bang on sequence start; +#X obj 58 -9 loadbang; +#X msg 24 -7 1; +#X msg 159 141 adsrgate \$1; +#X obj 159 94 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; +#X text 205 114 on by default \, zero turns off ADSR; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X restore 133 64 pd other-controls; +#N canvas 367 423 470 320 sequences 0; +#X obj 76 246 outlet; +#X msg 200 91 440 469.333 605 660 704; +#X msg 173 190 500 600 700 1300 888 340 3000 773 773; +#X obj 227 148 loadbang; +#X msg 53 113 rand \$1; +#X obj 53 59 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; +#X obj 129 30 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; +#X msg 129 84 retro \$1; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 0 0; +#X restore 176 98 pd sequences; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X restore 20 96 pd messages; +#X obj 18 18 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 15 52 sigseq~ - sample-accurate sequencing; +#X floatatom 105 219 5 0 0 2 - sigseq-gain -, f 5; +#X obj 148 218 hsl 128 15 0 0.2 0 0 sigseq-gain sigseq-gain-in gain +-2 -8 0 10 -203904 -1 -1 4400 1; +#X text 111 101 <- controls here; +#X connect 0 0 5 0; +#X connect 0 1 3 1; +#X connect 0 2 1 0; +#X connect 2 0 4 0; +#X connect 2 0 4 1; +#X connect 3 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 0 0; +#X connect 6 1 0 0; +#X connect 9 0 2 1; diff --git a/externals/lyonpotpourri/sigseq~.c b/externals/lyonpotpourri/sigseq~.c new file mode 100755 index 000000000..a2233d763 --- /dev/null +++ b/externals/lyonpotpourri/sigseq~.c @@ -0,0 +1,572 @@ +#include "MSPd.h" + + +static t_class *sigseq_class; + +#define MAX_VEC 2048 +#define MAX_SEQ 1024 +#define internal_clock 1 +#define EXTERNAL_CLOCK 2 + +#define OBJECT_NAME "sigseq~" +typedef struct _sigseq +{ + + t_object x_obj; + float x_f; + + // Variables Here + float *sequence; + float *trigger_vec; // stores vector with trigger click + int seq_len; + int seq_ptr;// position in sequence + short bang_ptr; + float tempo; + int beat_subdiv; + int tsamps; + int counter; + float val; + void *mybang; + void *m_outlet; // NEW + void *m_clock; // NEW + float flat_gain; + float last_val; + short retro_state; + short rand_state; + // ADSR + float a; + float d; + float s; + float r; + int ebreak1; + int ebreak2; + int ebreak3; + int asamps; + int dsamps; + int ssamps; + int rsamps; + float egain; + int do_envelope; + int bang_on; + short mute; + int rval; + int method; //synthesis method to use + float sr; +} t_sigseq; + +void *sigseq_new(t_symbol *s, int argc, t_atom *argv); + +t_int *sigseq_perform(t_int *w); +t_int *sigseq_perform_clickin(t_int *w); +void sigseq_dsp(t_sigseq *x, t_signal **sp); +void sigseq_list (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_adsr (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_adsrgate (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_banggate (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_tempo(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_retro(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_rand(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_mute(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv); +void sigseq_tick(t_sigseq *x); +void sigseq_report(t_sigseq *x); +void sigseq_readfile(t_sigseq *x, t_symbol *filename); +void sigseq_internal_clock(t_sigseq *x, t_floatarg toggle); +void sigseq_external_clock(t_sigseq *x, t_floatarg toggle); +void sigseq_gozero(t_sigseq *x); +void sigseq_free(t_sigseq *x); +void sigseq_init(t_sigseq *x,short initialized); + + +void sigseq_tilde_setup(void){ + sigseq_class = class_new(gensym("sigseq~"), (t_newmethod)sigseq_new, + (t_method)sigseq_free ,sizeof(t_sigseq), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(sigseq_class, t_sigseq, x_f); + class_addmethod(sigseq_class,(t_method)sigseq_dsp,gensym("dsp"),0); + class_addmethod(sigseq_class,(t_method)sigseq_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(sigseq_class,(t_method)sigseq_list,gensym("list"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_adsr,gensym("adsr"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_adsrgate,gensym("adsrgate"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_banggate,gensym("banggate"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_tempo,gensym("tempo"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_retro,gensym("retro"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_rand,gensym("rand"),A_GIMME,0); + class_addmethod(sigseq_class,(t_method)sigseq_report,gensym("report"),0); + class_addmethod(sigseq_class,(t_method)sigseq_gozero,gensym("gozero"),0); + class_addmethod(sigseq_class,(t_method)sigseq_internal_clock,gensym("internal_clock"),A_FLOAT,0); + class_addmethod(sigseq_class,(t_method)sigseq_external_clock,gensym("external_clock"),A_FLOAT,0); + potpourri_announce(OBJECT_NAME); +} + +void sigseq_gozero(t_sigseq *x) +{ + if(x->seq_len <= 0) + return; + x->seq_ptr = x->seq_len - 1; +} + +void sigseq_internal_clock(t_sigseq *x, t_floatarg toggle) +{ + if(toggle){ + x->method = internal_clock; + } else { + x->method = EXTERNAL_CLOCK; + } +} + +void sigseq_external_clock(t_sigseq *x, t_floatarg toggle) +{ + if(toggle){ + x->method = EXTERNAL_CLOCK; + } else { + x->method = internal_clock; + } + post("method is %d",x->method); +} + +void sigseq_report(t_sigseq *x) +{ + int i; + post("randstate: %d", x->rand_state); + post("rval: %d", x->rval); + post("seqpt: %d", x->seq_ptr); + post("manual rnd pos: %d", x->rval % x->seq_len); + + for(i=0;i<x->seq_len;i++){ + post("%f",x->sequence[i]); + } +} + +void sigseq_readfile(t_sigseq *x, t_symbol *filename) +{ + FILE *fp; + float data; + post("requested path: %s", filename->s_name); + fp = fopen(filename->s_name, "r"); + if( fp == NULL ){ + post("could not open file!"); + return; + } + while( fscanf(fp, "%f", &data) != EOF ){ + post("%f",data); + } + fclose(fp); +} + +void sigseq_mute(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + x->mute = atom_getfloatarg(0,argc,argv); +} + + +void sigseq_rand(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + x->rand_state = atom_getfloatarg(0,argc,argv); +} + +void sigseq_retro(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + x->retro_state = atom_getfloatarg(0,argc,argv); + +} + +void sigseq_adsrgate(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + + x->do_envelope = atom_getfloatarg(0,argc,argv); +} + +void sigseq_banggate(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + + x->bang_on = atom_getfloatarg(0,argc,argv); +} + +void sigseq_tempo(t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + float beatdur; + + x->tempo = atom_getfloatarg(0,argc,argv); + if(!x->tempo) + x->tempo = 120; + + beatdur = (60. / x->tempo ) / (float) x->beat_subdiv ; + x->tsamps = x->sr * beatdur; + + x->asamps = x->sr * x->a; + x->dsamps = x->sr * x->d; + x->rsamps = x->sr * x->r; + x->ssamps = x->tsamps - (x->asamps+x->dsamps+x->rsamps); + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + if( x->ssamps < 0 ){ + x->ssamps = 0; + // post("adsr: Warning: zero duration sustain"); + } +} +void *sigseq_new(t_symbol *s, int argc, t_atom *argv) +{ + t_sigseq *x = (t_sigseq *)pd_new(sigseq_class); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + x->mybang = outlet_new(&x->x_obj, gensym("bang")); + x->m_clock = clock_new(x,(void *)sigseq_tick); + + srand(clock()); + x->tempo = atom_getfloatarg(0,argc,argv); + x->beat_subdiv = atom_getfloatarg(1,argc,argv); + x->flat_gain = atom_getfloatarg(2,argc,argv); + if( x->tempo <= 0 ) + x->tempo = 120.; + if(x->beat_subdiv <= 0) + x->beat_subdiv = 2; + if(x->flat_gain<= 0) + x->flat_gain = 0.5; + + x->sr = sys_getsr(); + if(!x->sr){ + x->sr = 44100; + error("zero sampling rate - set to 44100"); + } + sigseq_init(x,0); + + return (x); +} + +void sigseq_init(t_sigseq *x,short initialized) +{ + float beatdur; + int asamp, dsamp, ssamp, rsamp; + // int i; + + if(!initialized){ + x->sequence = (float *) t_getbytes(MAX_SEQ * sizeof(float)); + x->trigger_vec = (float *) t_getbytes(MAX_VEC * sizeof(float)); + x->seq_len = 3; + x->seq_ptr = 0; + x->bang_ptr = 0; + x->sequence[0] = 313; + x->sequence[1] = 511; + x->sequence[2] = 71; + x->method = internal_clock; + x->a = .005; + x->d = .01; + x->r = .2; + x->egain = .707; + x->do_envelope = 1; + x->bang_on = 0; + x->retro_state = 0; + x->rand_state = 0; + x->mute = 0; + } + + beatdur = (60. / x->tempo ) / (float) x->beat_subdiv; + x->tsamps = x->sr * beatdur; + x->counter = x->tsamps ; + x->last_val = 666.6661; + x->val = x->sequence[0]; + asamp = x->sr * x->a; + dsamp = x->sr * x->d; + rsamp = x->sr * x->r; + ssamp = x->tsamps - (asamp+dsamp+rsamp); + if( ssamp < 0 ){ + ssamp = 0; + } + x->ebreak1 = asamp; + x->ebreak2 = asamp+dsamp; + x->ebreak3 = asamp+dsamp+ssamp; + x->asamps = asamp; + x->dsamps = dsamp; + x->ssamps = ssamp; + x->rsamps = rsamp; +} + +void sigseq_tick(t_sigseq *x) +{ + if(x->seq_ptr) //weird that we need this + x->seq_ptr = 0; + // post("bang: val %f s0 %f pt %d",x->val,x->sequence[0],x->seq_ptr); + outlet_bang(x->mybang); +} + +void sigseq_list (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + short i; + + if( argc < 1 ){ + // post("null list ignored"); + return; + } + x->seq_len = 0; + for( i = 0; i < argc; i++ ){ + x->sequence[i] = atom_getfloatarg(i,argc,argv); + ++(x->seq_len); + } + x->seq_ptr = 0; + x->val = x->sequence[ 0 ]; + x->counter = 0 ; + // sigseq_tick(x); + return; +} + +void sigseq_adsr (t_sigseq *x, t_symbol *msg, short argc, t_atom *argv) +{ + // short i; + + if( argc != 4 ){ + error("sigseq~: bad arguments for adsr"); + return; + } + x->a = atom_getfloatarg(0,argc,argv) * .001; + x->d = atom_getfloatarg(1,argc,argv) * .001; + x->r = atom_getfloatarg(2,argc,argv) * .001; + x->egain = atom_getfloatarg(3,argc,argv); + + x->asamps = x->sr * x->a; + x->dsamps = x->sr * x->d; + x->rsamps = x->sr * x->r; + x->ssamps = x->tsamps - (x->asamps+x->dsamps+x->rsamps); + x->ebreak1 = x->asamps; + x->ebreak2 = x->asamps+x->dsamps; + x->ebreak3 = x->asamps+x->dsamps+x->ssamps; + if( x->ssamps < 0 ){ + x->ssamps = 0; + // post("adsr: Warning: zero duration sustain"); + } + // post("A %d D %d S %d R %d gain %f",x->asamps,x->dsamps,x->ssamps,x->rsamps,x->egain); + return; +} +t_int *sigseq_perform(t_int *w) +{ + + t_sigseq *x = (t_sigseq *) (w[1]); + // t_float *in = (t_float *)(w[2]); + t_float *out = (t_float *)(w[3]); + t_float *adsr = (t_float *)(w[4]); + int n = (int) w[5]; + /*********************************************/ + float *sequence = x->sequence; + int seq_len = x->seq_len; + int seq_ptr = x->seq_ptr; + int tsamps = x->tsamps; + int counter = x->counter; + float val = x->val; + float last_val = x->last_val; + int ebreak1 = x->ebreak1; + int ebreak2 = x->ebreak2; + int ebreak3 = x->ebreak3; + float egain = x->egain; + float env_val; + float flat_gain = x->flat_gain; + int do_envelope = x->do_envelope; + int asamps = x->asamps; + int dsamps = x->dsamps; + // int ssamps = x->ssamps; + int rsamps = x->rsamps; + int bang_on = x->bang_on; + short bang_ptr = x->bang_ptr; + short retro_state = x->retro_state; + short rand_state = x->rand_state; + float etmp; + // short bang_me_now = 0 ; + float trand; + /*********************************************/ + if(x->mute){ + while (n--) { + *out++ = 0.0; + } + return (w+6); + } else { + + while(n--) { + if(counter >= tsamps){ + counter = 0; + bang_ptr = (bang_ptr + 1) % seq_len ; + if (rand_state) { + trand = (float) ( rand() % 32768 / 32768.0) * (float) seq_len; + x->rval = trand ; + seq_ptr = x->rval % seq_len; + + } + else if (retro_state) { + seq_ptr = (seq_ptr - 1) % seq_len ; + if( seq_ptr < 0) { + seq_ptr = seq_len - 1; + } + // + } + else { + seq_ptr = (seq_ptr + 1) % seq_len ; + } + if ( seq_ptr >= seq_len || seq_ptr < 0) { + seq_ptr = 1; + } + val = sequence[ seq_ptr ]; + if( bang_ptr == 0 && bang_on) { + clock_delay(x->m_clock,0); + } + } + *out++ = val; + if( do_envelope ) { + if( counter < ebreak1 ){ + env_val = (float) counter / (float) asamps; + } else if (counter < ebreak2) { + etmp = (float) (counter - ebreak1) / (float) dsamps; + env_val = (1.0 - etmp) + (egain * etmp); + } else if (counter < ebreak3) { + env_val = egain; + } else { + env_val = ((float)(tsamps-counter)/(float)rsamps) * egain ; + } + *adsr++ = env_val; + } else { + *adsr++ = flat_gain; + } + counter++; + } + if( last_val != val) { + last_val = val; + } + + x->seq_ptr = seq_ptr; + x->bang_ptr = bang_ptr; + x->counter = counter; + x->val = val; + x->last_val = last_val; + + } + return (w+6); +} + + +t_int *sigseq_perform_clickin(t_int *w) +{ + + t_sigseq *x = (t_sigseq *) (w[1]); + t_float *trigger = (t_float *)(w[2]); + t_float *out = (t_float *)(w[3]); + t_float *adsr = (t_float *)(w[4]); + int n = (int) w[5]; + /*********************************************/ + float *sequence = x->sequence; + int seq_len = x->seq_len; + int seq_ptr = x->seq_ptr; + int tsamps = x->tsamps; + int counter = x->counter; + // float val = x->val; + float last_val = x->last_val; + int ebreak1 = x->ebreak1; + int ebreak2 = x->ebreak2; + int ebreak3 = x->ebreak3; + float egain = x->egain; + float env_val; + float flat_gain = x->flat_gain; + int do_envelope = x->do_envelope; + int asamps = x->asamps; + int dsamps = x->dsamps; + // int ssamps = x->ssamps; + int rsamps = x->rsamps; + int bang_on = x->bang_on; + short bang_ptr = x->bang_ptr; + short retro_state = x->retro_state; + short rand_state = x->rand_state; + float *trigger_vec = x->trigger_vec; + float etmp; + // short bang_me_now = 0 ; + float trand; + int i; + /*********************************************/ + if(x->mute){ + while (n--) { + *out++ = 0.0; + } + return (w+6); + } + + for(i = 0; i < n; i++){ + trigger_vec[i] = trigger[i]; + } + for(i = 0; i < n; i++) { + if(trigger_vec[i]){ + counter = 0; + // bang_ptr = (bang_ptr + 1) % seq_len ; + + if (rand_state) { + trand = (float) ( rand() % 32768 / 32768.0) * (float) seq_len; + x->rval = trand ; + x->seq_ptr = x->rval % seq_len; + + } + else if (retro_state) { + x->seq_ptr = (seq_ptr - 1) % seq_len ; + if( x->seq_ptr < 0) { + x->seq_ptr = seq_len - 1; + } + } + else { + x->seq_ptr = (x->seq_ptr + 1) % seq_len ; + } + if ( x->seq_ptr >= seq_len || x->seq_ptr < 0) { + x->seq_ptr = 1; + } + x->val = sequence[x->seq_ptr]; + if(x->seq_ptr == 0 && bang_on) { + clock_delay(x->m_clock,0); + } + } + out[i] = x->val; + if( do_envelope ) { + if( counter < ebreak1 ){ + env_val = (float) counter / (float) asamps; + } else if (counter < ebreak2) { + etmp = (float) (counter - ebreak1) / (float) dsamps; + env_val = (1.0 - etmp) + (egain * etmp); + } else if (counter < ebreak3) { + env_val = egain; + } else if(counter < tsamps) { + env_val = ((float)(tsamps-counter)/(float)rsamps) * egain ; + } else { + env_val = 0; + } + adsr[i] = env_val; + } else { + adsr[i] = flat_gain; + } + counter++; + } + if( last_val != x->val) { + last_val = x->val; + } + + x->bang_ptr = bang_ptr; + x->counter = counter; + + x->last_val = last_val; + + return (w+6); +} + +void sigseq_free(t_sigseq *x) +{ + + t_freebytes(x->sequence, MAX_SEQ * sizeof(float)); + t_freebytes(x->trigger_vec, MAX_VEC * sizeof(float)); +} + +void sigseq_dsp(t_sigseq *x, t_signal **sp) +{ + if(!sp[0]->s_sr) + return; + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + sigseq_init(x,1); + } + if(x->method == EXTERNAL_CLOCK){ + dsp_add(sigseq_perform_clickin, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } else { + dsp_add(sigseq_perform, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); + } +} + diff --git a/externals/lyonpotpourri/smap-help.pd b/externals/lyonpotpourri/smap-help.pd new file mode 100755 index 000000000..37a53b9e2 --- /dev/null +++ b/externals/lyonpotpourri/smap-help.pd @@ -0,0 +1,9 @@ +#N canvas 246 169 450 300 10; +#X obj 141 163 smap 0 4; +#X obj 144 113 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 141 195 5 0 0 0 - - -; +#X text 49 56 remap a 0-127 MIDI input range to the output range specified +in the arguments; +#X connect 0 0 2 0; +#X connect 1 0 0 0; diff --git a/externals/lyonpotpourri/smap.pd b/externals/lyonpotpourri/smap.pd new file mode 100755 index 000000000..de9549d85 --- /dev/null +++ b/externals/lyonpotpourri/smap.pd @@ -0,0 +1,28 @@ +#N canvas 0 22 458 308 10; +#X obj 88 84 inlet; +#X obj 88 110 / 127; +#X obj 265 144 - 0; +#X obj 283 38 t b b; +#X floatatom 128 161 5 0 0 0 - - -; +#X obj 88 181 *; +#X obj 88 210 +; +#X floatatom 135 192 5 0 0 0 - - -; +#X obj 88 237 outlet; +#X obj 283 17 loadbang; +#X floatatom 205 125 5 0 0 0 - - -; +#X obj 227 66 float \$2; +#X obj 304 67 float \$1; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 4 0; +#X connect 3 0 11 0; +#X connect 3 1 12 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 7 0 6 1; +#X connect 9 0 3 0; +#X connect 10 0 2 0; +#X connect 11 0 10 0; +#X connect 12 0 2 1; +#X connect 12 0 7 0; diff --git a/externals/lyonpotpourri/splitbank~-help.pd b/externals/lyonpotpourri/splitbank~-help.pd new file mode 100755 index 000000000..58f5bd140 --- /dev/null +++ b/externals/lyonpotpourri/splitbank~-help.pd @@ -0,0 +1,355 @@ +#N canvas 551 163 627 595 10; +#X obj 36 501 shoehorn~ 8 2, f 32; +#N canvas 371 171 799 432 splitter 0; +#X obj 533 297 block~ 128 1; +#X obj 103 237 outlet~; +#X obj 151 236 outlet~; +#X obj 203 243 outlet~; +#X obj 251 242 outlet~; +#X obj 325 241 outlet~; +#X obj 373 240 outlet~; +#X obj 425 247 outlet~; +#X obj 133 70 inlet~; +#X obj 54 234 outlet~; +#X obj 270 86 unpack f f f f f f f f; +#X msg 271 53 1 1 1 1 1 1 1 1; +#X obj 625 244 outlet; +#X obj 271 18 loadbang; +#X obj 598 94 inlet; +#X obj 133 172 splitbank~ 8, f 78; +#X obj 537 253 outlet~; +#X obj 453 85 inlet; +#X obj 15 71 r splitbank-msg; +#X obj 495 92 inlet; +#X obj 547 92 inlet; +#X text 51 269 FFT size is (signal-vector-size * overlap-factor). The +overlap factor is specified internally \, and defaults to 8.0. Overlap-add +and windowing is performed internally \, so the block~ overlap factor +must be 1.0. The vector size of 128 used here produces an FFT size +of 1024 by default., f 41; +#X connect 8 0 15 0; +#X connect 10 0 15 1; +#X connect 10 1 15 2; +#X connect 10 2 15 3; +#X connect 10 3 15 4; +#X connect 10 4 15 5; +#X connect 10 5 15 6; +#X connect 10 6 15 7; +#X connect 10 7 15 8; +#X connect 11 0 10 0; +#X connect 13 0 11 0; +#X connect 14 0 15 12; +#X connect 15 0 9 0; +#X connect 15 1 1 0; +#X connect 15 2 2 0; +#X connect 15 3 3 0; +#X connect 15 4 4 0; +#X connect 15 5 5 0; +#X connect 15 6 6 0; +#X connect 15 7 7 0; +#X connect 15 8 16 0; +#X connect 15 9 12 0; +#X connect 17 0 15 9; +#X connect 18 0 15 0; +#X connect 19 0 15 10; +#X connect 20 0 15 11; +#X restore 36 363 pd splitter; +#X obj 36 549 dac~; +#X obj 365 465 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 365 523 \; pd dsp \$1; +#X obj 399 288 hsl 128 15 0 1 0 0 empty empty manual_override -2 -8 +0 10 -262144 -1 -1 0 1; +#X floatatom 252 538 5 0 0 0 sync_signal - -, f 5; +#X obj 272 169 hsl 128 15 0 0.01 0 0 empty empty synthesis_threshold +-2 -8 0 10 -262144 -1 -1 0 1; +#N canvas 184 87 542 546 soundsource 0; +#X obj 66 406 outlet~; +#X obj 62 350 *~ 0.1; +#X obj 42 198 -~ 0.5; +#X obj 46 144 phasor~ 440; +#X floatatom 109 63 5 0 0 0 - - -, f 5; +#X obj 147 146 phasor~ 440; +#X obj 150 191 -~ 0.5; +#X obj 133 96 *~ 1.5; +#X msg 416 179 100; +#X obj 416 157 loadbang; +#X obj 268 26 inlet; +#X obj 342 300 s splitbank-freq; +#X obj 138 316 hsl 128 15 0 0.4 0 0 empty empty gain -2 -8 0 10 -262144 +-1 -1 4700 1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 4 0 7 0; +#X connect 5 0 6 0; +#X connect 6 0 1 0; +#X connect 7 0 5 0; +#X connect 8 0 11 0; +#X connect 9 0 8 0; +#X connect 10 0 4 0; +#X connect 12 0 1 1; +#X restore 36 231 pd soundsource; +#X floatatom 36 206 5 0 0 2 frequency splitbank-freq -, f 5; +#X obj 318 210 hsl 128 15 0 1 0 0 empty empty table_offset -2 -8 0 +10 -262144 -1 -1 0 1; +#X obj 352 250 hsl 128 15 0 1 0 0 empty empty bin_offset -2 -8 0 10 +-262144 -1 -1 0 1; +#N canvas 617 105 817 690 state 0; +#X obj 49 66 inlet; +#X msg 49 93 set \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 +\$13 \$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21 \$22 \$23 \$24 \$25 \$26 +\$27 \$28 \$29 \$30 \$31 \$32 \$33 \$34 \$35 \$36 \$37 \$38 \$39 \$40 +\$41 \$42 \$43 \$44 \$45 \$46 \$47 \$48 \$49 \$50 \$51 \$52 \$53 \$54 +\$55 \$56 \$57 \$58 \$59 \$60 \$61 \$62 \$63 \$64 \$65 \$66 \$67 \$68 +\$69 \$70 \$71 \$72 \$73 \$74 \$75 \$76 \$77 \$78 \$79 \$80 \$81 \$82 +\$83 \$84 \$85 \$86 \$87 \$88 \$89 \$90 \$91 \$92 \$93 \$94 \$95 \$96 +\$97 \$98 \$99 \$100 \$101 \$102 \$103 \$104 \$105 \$106 \$107 \$108 +\$109 \$110 \$111 \$112 \$113 \$114 \$115 \$116 \$117 \$118 \$119 \$120 +\$121 \$122 \$123 \$124 \$125 \$126 \$127 \$128 \$129 \$130 \$131 \$132 +\$133 \$134 \$135 \$136 \$137 \$138 \$139 \$140 \$141 \$142 \$143 \$144 +\$145 \$146 \$147 \$148 \$149 \$150 \$151 \$152 \$153 \$154 \$155 \$156 +\$157 \$158 \$159 \$160 \$161 \$162 \$163 \$164 \$165 \$166 \$167 \$168 +\$169 \$170 \$171 \$172 \$173 \$174 \$175 \$176 \$177 \$178 \$179 \$180 +\$181 \$182 \$183 \$184 \$185 \$186 \$187 \$188 \$189 \$190 \$191 \$192 +\$193 \$194 \$195 \$196 \$197 \$198 \$199 \$200 \$201 \$202 \$203 \$204 +\$205 \$206 \$207 \$208 \$209 \$210 \$211 \$212 \$213 \$214 \$215 \$216 +\$217 \$218 \$219 \$220 \$221 \$222 \$223 \$224 \$225 \$226 \$227 \$228 +\$229 \$230 \$231 \$232 \$233 \$234 \$235 \$236 \$237 \$238 \$239 \$240 +\$241 \$242 \$243 \$244 \$245 \$246 \$247 \$248 \$249 \$250 \$251 \$252 +\$253 \$254 \$255 \$256 \$257 \$258 \$259 \$260 \$261 \$262 \$263 \$264 +\$265 \$266 \$267 \$268 \$269 \$270 \$271 \$272 \$273 \$274 \$275 \$276 +\$277 \$278 \$279 \$280 \$281 \$282 \$283 \$284 \$285 \$286 \$287 \$288 +\$289 \$290 \$291 \$292 \$293 \$294 \$295 \$296 \$297 \$298 \$299 \$300 +\$301 \$302 \$303 \$304 \$305 \$306 \$307 \$308 \$309 \$310 \$311 \$312 +\$313 \$314 \$315 \$316 \$317 \$318 \$319 \$320 \$321 \$322 \$323 \$324 +\$325 \$326 \$327 \$328 \$329 \$330 \$331 \$332 \$333 \$334 \$335 \$336 +\$337 \$338 \$339 \$340 \$341 \$342 \$343 \$344 \$345 \$346 \$347 \$348 +\$349 \$350 \$351 \$352 \$353 \$354 \$355 \$356 \$357 \$358 \$359 \$360 +\$361 \$362 \$363 \$364 \$365 \$366 \$367 \$368 \$369 \$370 \$371 \$372 +\$373 \$374 \$375 \$376 \$377 \$378 \$379 \$380 \$381 \$382 \$383 \$384 +\$385 \$386 \$387 \$388 \$389 \$390 \$391 \$392 \$393 \$394 \$395 \$396 +\$397 \$398 \$399 \$400 \$401 \$402 \$403 \$404 \$405 \$406 \$407 \$408 +\$409 \$410 \$411 \$412 \$413 \$414 \$415 \$416 \$417 \$418 \$419 \$420 +\$421 \$422 \$423 \$424 \$425 \$426 \$427 \$428 \$429 \$430 \$431 \$432 +\$433 \$434 \$435 \$436 \$437 \$438 \$439 \$440 \$441 \$442 \$443 \$444 +\$445 \$446 \$447 \$448 \$449 \$450 \$451 \$452 \$453 \$454 \$455 \$456 +\$457 \$458 \$459 \$460 \$461 \$462 \$463 \$464 \$465 \$466 \$467 \$468 +\$469 \$470 \$471 \$472 \$473 \$474 \$475 \$476 \$477 \$478 \$479 \$480 +\$481 \$482 \$483 \$484 \$485 \$486 \$487 \$488 \$489 \$490 \$491 \$492 +\$493 \$494 \$495 \$496 \$497 \$498 \$499 \$500 \$501 \$502 \$503 \$504 +\$505 \$506 \$507 \$508 \$509 \$510 \$511 \$512 512; +#X msg 433 93 205 7 49 10 211 58 51 76 121 62 63 212 243 181 157 71 +165 233 140 16 82 20 74 152 238 218 230 214 204 50 26 117 242 179 215 +53 237 79 199 95 91 41 161 208 80 189 67 154 3 252 146 216 65 23 148 +192 200 223 248 36 134 5 106 119 124 130 145 227 133 13 45 235 59 128 +14 166 251 34 113 42 56 164 94 122 93 17 190 37 224 176 174 103 102 +175 84 159 196 101 9 253 184 98 132 4 221 229 66 245 115 191 141 114 +100 185 210 81 110 193 44 137 68 155 116 169 203 127 97 108 2 249 52 +125 167 254 178 39 158 240 247 29 195 234 46 123 202 32 61 239 194 +25 222 118 143 197 180 120 15 188 182 92 172 38 207 153 18 160 156 +31 96 27 30 72 220 236 70 40 231 75 241 11 54 69 250 47 206 33 19 198 +129 6 171 64 150 85 83 24 107 99 225 246 135 226 88 187 0 213 162 60 +147 77 255 131 111 168 244 139 21 105 1 112 22 43 177 35 228 173 138 +170 183 232 209 149 217 163 136 86 57 90 8 142 12 144 78 104 201 55 +48 89 109 87 28 186 219 151 73 126 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 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 512; +#X text 434 69 current bin mapping; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 279 470 pd state; +#N canvas 0 22 695 522 sig2float 0; +#X obj 200 68 inlet~; +#X obj 343 201 outlet; +#X obj 343 168 snapshot~; +#X msg 343 106 1; +#X obj 343 82 loadbang; +#X obj 343 133 metro 50; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X restore 252 501 pd sig2float; +#N canvas 53 282 535 369 interval-sets 0; +#X msg -79 52 1 1 1 1 1 1 1 1; +#X msg -66 76 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7; +#X msg -56 103 1 1.01 1.02 1.03 1.04 1.05 1.06 1.07; +#X obj -92 294 s splitbank-msg; +#X msg -92 21 1 1.25 1.5 2 0.5 1 1.875 2.25; +#X msg -41 132 1 1.059 1.122 1.189 1.259 1.334 1.414 1.498; +#X msg -26 160 1 1.122 1.259 1.414 1.587 1.781 1.999 2.244; +#X msg -12 195 1 1.189 1.414 1.681 1.999 2.378 2.828 3.363; +#X msg 4 217 1 1.0009 1.002 1.003 1.004 1.005 1.006 1.007; +#X text 13 250 list unpacks to frequency multipliers for each spectrum +fragment; +#X connect 0 0 3 0; +#X connect 1 0 3 0; +#X connect 2 0 3 0; +#X connect 4 0 3 0; +#X connect 5 0 3 0; +#X connect 6 0 3 0; +#X connect 7 0 3 0; +#X connect 8 0 3 0; +#X restore 404 69 pd interval-sets; +#N canvas 111 193 455 381 frequency-synthesis-constraints 0; +#X obj 14 214 s splitbank-msg; +#X msg 67 86 maxfreq 600; +#X msg 168 137 minfreq 200; +#X msg 151 112 minfreq 0; +#X msg 14 35 maxfreq 19000; +#X msg 41 62 maxfreq 1500; +#X msg 179 161 minfreq 900; +#X text 9 252 The range of frequencies to be synthesized can be specfied +by minimum and maximum. Actually produced frequencies will vary outside +this range \, depending on the current interval set. Constraining frequency +range reduces the CPU load. When the minimum frequency equals or exceeds +the maximum \, no sound is produced.; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X restore 404 95 pd frequency-synthesis-constraints; +#N canvas 367 60 618 567 basic-messages 0; +#X msg -86 57 manual_override \$1; +#X msg -1 306 scramble; +#X msg -9 275 ramptime 5000; +#X obj -104 418 s splitbank-msg; +#X msg -49 175 powerfade \$1; +#X obj -49 148 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg -28 239 mute \$1; +#X obj -28 202 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg -102 -7 fftinfo; +#X msg -114 -41 showstate; +#X obj -86 26 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 62 307 set new random mapping; +#X text 29 239 mute all sound and release CPU cycles; +#X text 40 60 manually move between two settings when this toggle is +on; +#X text -44 -6 print FFT size and related information; +#X text -47 -40 show the current bin mapping; +#X text 83 268 set transition time (in milliseconds) to move from one +mapping to the next; +#X obj -19 34 s splitbank-man-override; +#X text 144 362 change overlap factor (DACs must be restarted); +#X msg 79 448 \; pd dsp \$1; +#X obj 79 395 t b b; +#X msg 114 418 1; +#X msg 79 418 0; +#X obj 123 394 delay 1; +#X msg 78 361 overlap 4; +#X text 41 172 select equal-power cross fade \, rather than linear +(default); +#X connect 0 0 3 0; +#X connect 1 0 3 0; +#X connect 2 0 3 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 7 0 6 0; +#X connect 8 0 3 0; +#X connect 9 0 3 0; +#X connect 10 0 0 0; +#X connect 10 0 17 0; +#X connect 20 0 23 0; +#X connect 20 1 22 0; +#X connect 21 0 19 0; +#X connect 22 0 19 0; +#X connect 23 0 21 0; +#X connect 24 0 3 0; +#X connect 24 0 20 0; +#X restore 403 43 pd basic-messages; +#X text 26 39 splitbank~ splits an incoming sound into a number of +sub-spectra \, each of which is independently tunable. Each sub-spectrum +emerges from its own outlet \, from where it can be fully spatialized +\, or collapsed to stereo as shown in this example. The internal design +of the FFT processing requires that the object be deployed inside a +block~ subpatcher \, in order to gain control over the FFT size.; +#X text 121 363 <- main DSP block~ subpatch; +#N canvas 131 124 508 327 timing 0; +#N canvas 95 351 507 328 steadyclock 0; +#X obj 83 25 inlet; +#X obj 133 86 t 1 f f; +#X msg 206 148 ramptime \$1; +#X obj 217 287 s splitbank-msg; +#X obj 133 197 metro 1000; +#X msg 133 242 scramble; +#X obj 83 57 sel 0; +#X msg 84 112 0; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 1 1 4 1; +#X connect 1 2 2 0; +#X connect 2 0 3 0; +#X connect 4 0 5 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 1 1 0; +#X connect 7 0 4 0; +#X restore 26 292 pd steadyclock; +#X msg 73 87 7000; +#X msg 190 231 0; +#X msg 97 120 2000; +#X msg 167 176 100; +#X text 217 233 turn off clock; +#X msg 26 53 20000; +#X text 115 30 Set transition time in milliseconds. this smooth crossfade +does not operate when manual override is selected; +#X msg 123 151 500; +#X obj 231 106 r splitbank-man-override; +#X obj 231 139 sel 0 1; +#X msg 358 249 5000; +#X obj 358 175 r splitbank-startbang; +#X obj 358 214 delay 50; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 9 0 10 0; +#X connect 10 0 1 0; +#X connect 10 1 2 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 13 0 11 0; +#X restore 405 123 pd timing; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 436 508 sel 1; +#X obj 436 533 s splitbank-startbang; +#X connect 0 0 2 0; +#X connect 0 1 2 1; +#X connect 1 0 0 0; +#X connect 1 1 0 1; +#X connect 1 2 0 2; +#X connect 1 3 0 3; +#X connect 1 4 0 4; +#X connect 1 5 0 5; +#X connect 1 6 0 6; +#X connect 1 7 0 7; +#X connect 1 8 13 0; +#X connect 1 9 12 0; +#X connect 3 0 4 0; +#X connect 3 0 21 0; +#X connect 5 0 1 4; +#X connect 7 0 1 1; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 1 2; +#X connect 11 0 1 3; +#X connect 13 0 6 0; +#X connect 21 0 22 0; diff --git a/externals/lyonpotpourri/splitbank~.c b/externals/lyonpotpourri/splitbank~.c new file mode 100755 index 000000000..948cd4aa7 --- /dev/null +++ b/externals/lyonpotpourri/splitbank~.c @@ -0,0 +1 @@ +#include "MSPd.h" #define OSCBANK_TABLE_LENGTH (8192) #define OSCBANK_DEFAULT_TOPFREQ (15000.0) #define MAXSTORE (128) #define OBJECT_NAME "splitbank~" static t_class *splitbank_class; typedef struct { int R; int N; int N2; int Nw; int Nw2; int vector_size; int i; int in_count; float *Wanal; float *Wsyn; float *input_buffer; float *Hwin; float *complex_spectrum; float *interleaved_spectrum; float *output_buffer; // for convert float *c_lastphase_in; float *c_lastphase_out; float c_fundamental; float c_factor_in; float c_factor_out; float P; int table_length; float table_si; int first; float i_vector_size; float *lastamp; float *lastfreq; float *index; float *table; float pitch_increment; int lo_bin; int hi_bin; float synthesis_threshold; int overlap; int winfac; float user_lofreq; float user_hifreq; float curfreq; // faster FFT float mult; float *trigland; int *bitshuffle; } t_oscbank; typedef struct _splitbank { t_object x_obj; t_float x_f; t_oscbank **obanks; int N; int N2; int R; int overlap; void *list_outlet; t_atom *list_data; int *bin_tmp; int ramp_frames; int frames_left; float frame_duration; int vector_size; int table_offset; int bin_offset; float *last_mag; float *current_mag; int *last_binsplit; int *current_binsplit; int **stored_binsplits; short *stored_slots; float *in_amps; short new_distribution; short interpolation_completed; // short bypass; short initialize; short manual_override; float manual_control_value; short mute; short powerfade; int channel_count; long countdown_samps; // samps for a given fadetime long counter; int hopsamps; t_float **ins; // input signal vectors t_float **outs; // output signal vectors } t_splitbank; void *splitbank_new(t_symbol *s, int argc, t_atom *argv); t_int *splitbank_perform( t_int *w ); void splitbank_dsp(t_splitbank *x, t_signal **sp); void splitbank_showstate( t_splitbank *x ); void splitbank_manual_override( t_splitbank *x, t_floatarg toggle ); void splitbank_setstate( t_splitbank *x, t_symbol *msg, short argc, t_atom *argv); void splitbank_ramptime( t_splitbank *x, t_symbol *msg, short argc, t_atom *argv); int rand_index( int max); void splitbank_scramble (t_splitbank *x); void splitbank_store( t_splitbank *x, t_floatarg location ); void splitbank_recall( t_splitbank *x, t_floatarg location ); void splitbank_powerfade( t_splitbank *x, t_floatarg toggle ); void splitbank_maxfreq( t_splitbank *x, t_floatarg freq ); void splitbank_minfreq( t_splitbank *x, t_floatarg freq ); void splitbank_mute( t_splitbank *x, t_floatarg toggle ); void splitbank_fftinfo( t_splitbank *x); void splitbank_free( t_splitbank *x ); void splitbank_overlap( t_splitbank *x, t_floatarg ofac ); void splitbank_spliti( t_splitbank *x, float *dest_mag, int start, int end, float oldfrac); void splitbank_split(t_splitbank *x, int *binsplit, float *dest_mag, int start, int end ); int splitbank_closestPowerOfTwo(int p); void fftease_obank_analyze( t_oscbank *x ) ; void fftease_obank_initialize ( t_oscbank *x, float lo_freq, float hi_freq, int overlap, int R, int vector_size, int N); void fftease_obank_transpose( t_oscbank *x ); void fftease_obank_synthesize( t_oscbank *x ); void fftease_obank_destroy( t_oscbank *x ); void fftease_shiftin( t_oscbank *x, float *input ); void fftease_shiftout( t_oscbank *x, float *output ); void fftease_obank_topfreq( t_oscbank *x, float topfreq ); void fftease_obank_bottomfreq( t_oscbank *x, float bottomfreq ); void rfft( float *x, int N, int forward ); void cfft( float *x, int NC, int forward ); void bitreverse( float *x, int N ); void fold( float *I, float *W, int Nw, float *O, int N, int n ); void init_rdft(int n, int *ip, float *w); void rdft(int n, int isgn, float *a, int *ip, float *w); void bitrv2(int n, int *ip, float *a); void cftsub(int n, float *a, float *w); void rftsub(int n, float *a, int nc, float *c); void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); void makehamming( float *H, float *A, float *S, int Nw, int N, int I,int odd ); void makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); ////////// void splitbank_tilde_setup(void){ splitbank_class = class_new(gensym("splitbank~"), (t_newmethod)splitbank_new, (t_method)splitbank_free, sizeof(t_splitbank),0,A_GIMME,0); CLASS_MAINSIGNALIN(splitbank_class, t_splitbank, x_f); class_addmethod(splitbank_class, (t_method)splitbank_dsp, gensym("dsp"),0); class_addmethod(splitbank_class, (t_method)splitbank_showstate, gensym("showstate"),0); class_addmethod(splitbank_class, (t_method)splitbank_manual_override, gensym("manual_override"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_store, gensym("store"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_mute, gensym("mute"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_recall, gensym("recall"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_setstate, gensym("setstate"),A_GIMME,0); class_addmethod(splitbank_class, (t_method)splitbank_ramptime, gensym("ramptime"),A_GIMME,0); class_addmethod(splitbank_class, (t_method)splitbank_powerfade, gensym("powerfade"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_maxfreq, gensym("maxfreq"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_minfreq, gensym("minfreq"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_overlap, gensym("overlap"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_scramble, gensym("scramble"),0); class_addmethod(splitbank_class, (t_method)splitbank_fftinfo, gensym("fftinfo"),0); potpourri_announce(OBJECT_NAME); } void splitbank_overlap( t_splitbank *x, t_floatarg ofac ) { x->overlap = splitbank_closestPowerOfTwo( (int)ofac ); } void splitbank_powerfade( t_splitbank *x, t_floatarg toggle ) { x->powerfade = (short)toggle; } void splitbank_mute( t_splitbank *x, t_floatarg toggle ) { x->mute = (short)toggle; } void splitbank_fftinfo( t_splitbank *x) { post("FFT size: %d", x->N); post("Overlap Factor: %d", x->overlap); post("Hop size: %d", x->hopsamps); } void splitbank_manual_override( t_splitbank *x, t_floatarg toggle ) { x->manual_override = (short)toggle; } void splitbank_free( t_splitbank *x ) { int i; if(x->initialize == 0){ free(x->list_data) ; free(x->current_binsplit); free(x->last_binsplit); free(x->current_mag); free(x->last_mag); free(x->bin_tmp); free(x->stored_slots); free(x->in_amps); for( i = 0; i < MAXSTORE; i++ ){ free(x->stored_binsplits[i]); } free(x->stored_binsplits); for(i = 0; i < x->channel_count + 5; i++){ free(x->ins[i]); } free(x->ins); free(x->outs); for(i = 0; i < x->channel_count; i++){ fftease_obank_destroy(x->obanks[i]); } free(x->obanks); } } void splitbank_maxfreq( t_splitbank *x, t_floatarg freq ) { int i; for(i = 0; i < x->channel_count; i++){ fftease_obank_topfreq( x->obanks[i], freq); } } void splitbank_minfreq( t_splitbank *x, t_floatarg freq ) { int i; for(i = 0; i < x->channel_count; i++){ fftease_obank_bottomfreq( x->obanks[i], freq); } } void splitbank_store( t_splitbank *x, t_floatarg loc ) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; short *stored_slots = x->stored_slots; int location = (int) loc; int i; if( location < 0 || location > MAXSTORE - 1 ){ error("location must be between 0 and %d, but was %d", MAXSTORE, location); return; } for(i = 0; i < x->N2; i++ ){ stored_binsplits[location][i] = current_binsplit[i]; } stored_slots[location] = 1; // post("stored bin split at location %d", location); } void splitbank_recall( t_splitbank *x, t_floatarg loc ) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; short *stored_slots = x->stored_slots; int i; int location = (int) loc; if( location < 0 || location > MAXSTORE - 1 ){ error("location must be between 0 and %d, but was %d", MAXSTORE, location); return; } if( ! stored_slots[location] ){ error("nothing stored at location %d", location); return; } for(i = 0; i < x->N2; i++ ){ last_binsplit[i] = current_binsplit[i]; current_binsplit[i] = stored_binsplits[location][i]; } x->new_distribution = 1; x->interpolation_completed = 0; x->frames_left = x->ramp_frames; if(! x->ramp_frames) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ){ x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } } int splitbank_closestPowerOfTwo(int p){ int base = 2; if(p > 2){ while(base < p){ base *= 2; } } return base; } void *splitbank_new(t_symbol *s, int argc, t_atom *argv) { t_splitbank *x = (t_splitbank *)pd_new(splitbank_class); int i; x->channel_count = (int) atom_getfloatarg(0, argc, argv); x->channel_count = splitbank_closestPowerOfTwo( x->channel_count ); // post("theoretic chan count: %d",x->channel_count ); // x->channel_count = 8; srand( time( 0 ) ); for(i = 0; i < x->channel_count + 4; i++){ inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i = 0; i < x->channel_count + 1; i++){ outlet_new(&x->x_obj, gensym("signal")); } x->ins = (t_float **) malloc(sizeof(t_float *) * (x->channel_count + 5)); x->outs = (t_float **) malloc(sizeof(t_float *) * (x->channel_count + 1)); for(i = 0; i < x->channel_count + 5; i++){ x->ins[i] = (t_float *) malloc(8192 * sizeof(t_float)); } x->list_outlet = (t_outlet *) outlet_new(&x->x_obj, gensym("list")); x->obanks = (t_oscbank **) malloc(x->channel_count * sizeof(t_oscbank *)); for(i = 0; i < x->channel_count; i++){ x->obanks[i] = (t_oscbank *) malloc(sizeof(t_oscbank)); } x->mute = 0; x->table_offset = 0; x->bin_offset = 0; x->powerfade = 0; x->manual_override = 0; x->countdown_samps = 0; x->overlap = 8; // to generate FFT size x->initialize = 1; return x; } t_int *splitbank_perform(t_int *w) { int i,j; float frac = 0.0; t_splitbank *x = (t_splitbank *) (w[1]); int channel_count = x->channel_count; float *input; float *synthesis_threshold; float *t_offset; float *b_offset; float *manual_control; float *sync = (t_float *)(w[(channel_count * 2) + 7]); int n = (int) w[(channel_count * 2) + 8]; int N2 = x->N2; int N = x->N; int hopsamps = x->hopsamps; // int frames_left = x->frames_left; // int ramp_frames = x->ramp_frames; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; float *in_amps = x->in_amps; float manual_control_value = x->manual_control_value; long counter = x->counter; long countdown_samps = x->countdown_samps; t_oscbank **obanks = x->obanks; t_float **ins = x->ins; t_float *inlet; t_float *outlet; t_float **outs = x->outs; // assign from output vector pointers // mute branch: clear outlets and return if(x->mute){ for(i = 0; i < (channel_count + 1); i++){ outlet = (t_float *) w[i + (channel_count + 7)]; for(j = 0; j < n; j++){ outlet[j] = 0.0; } } return (w + ((channel_count * 2) + 9)); } // Copy all inlets for(i = 0; i < channel_count + 5; i++){ inlet = (t_float *) w[2 + i]; for(j = 0; j < n; j++){ ins[i][j] = inlet[j]; } } // local assigments: input = ins[0]; synthesis_threshold = ins[channel_count + 1]; t_offset = ins[channel_count + 2]; b_offset = ins[channel_count + 3]; manual_control = ins[channel_count + 4]; // assign outlet pointers for(i = 0; i < (channel_count + 1); i++){ outs[i] = (t_float *) w[i + (channel_count + 7)]; // was 5 } sync = outs[channel_count]; for(i = 0; i < channel_count; i++){ obanks[i]->pitch_increment = ins[i+1][0] * obanks[i]->table_si; obanks[i]->synthesis_threshold = synthesis_threshold[0]; } x->table_offset = t_offset[0] * N2; x->bin_offset = b_offset[0] * N2; manual_control_value = manual_control[0]; // ANALYSIS (only analyze to one oscbank fftease_shiftin( obanks[0], input ); fftease_obank_analyze( obanks[0] ); // copy input amplitudes from analyzed frame for( i = 0, j = 0; i < N; i += 2 , j++){ in_amps[j] = obanks[0]->interleaved_spectrum[i]; } // zero the amps next for(i = 0; i < channel_count; i++){ for(j = 0; j < N; j += 2){ obanks[i]->interleaved_spectrum[j] = 0.0; } } if( x->manual_override ){ for(i = 0; i < channel_count; i++){ splitbank_spliti( x, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count, manual_control_value); } frac = manual_control_value; } else if( x->new_distribution ) { x->new_distribution = 0; for(i = 0; i < channel_count; i++){ splitbank_split( x, last_binsplit, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count); } frac = 0.0; } else if ( x->interpolation_completed ) { for(i = 0; i < channel_count; i++){ splitbank_split( x, current_binsplit, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count); } frac = 1.0; } else { frac = (float) counter / (float) countdown_samps; for(i = 0; i < channel_count; i++){ splitbank_spliti( x, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count, 1.0 - frac); } counter += hopsamps; if( counter >= countdown_samps ) { counter = countdown_samps; x->interpolation_completed = 1; } } for( i = 0; i < n; i++ ){ sync[i] = frac; } // copy frequency information to other banks for(i = 1; i < channel_count; i++){ for( j = 1; j < N; j += 2){ obanks[i]->interleaved_spectrum[j] = obanks[0]->interleaved_spectrum[j]; } } // SYNTHESIS for(i = 0; i < channel_count; i++){ fftease_obank_synthesize( obanks[i] ); fftease_shiftout( obanks[i], outs[i] ); } x->counter = counter; return (w + ((channel_count * 2) + 9)); } void splitbank_scramble (t_splitbank *x) { int i, j; int used; int max = x->N2; int bindex; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; int *bin_tmp = x->bin_tmp; x->new_distribution = 1; x->interpolation_completed = 0; // post("scrambling"); // Copy current mapping to last mapping (first time this will be all zeros) for( i = 0; i < x->N2; i++ ){ last_binsplit[i] = current_binsplit[i]; } for( i = 0; i < max; i++ ){ bin_tmp[i] = i; } used = max; // This randomly distributes each bin number (to occur once each in a random location) for( i = 0; i < max; i++ ){ bindex = rand_index( used ); current_binsplit[i] = bin_tmp[bindex]; for(j = bindex; j < used - 1; j++) { bin_tmp[j] = bin_tmp[j+1]; } --used; } x->counter = 0; if(! x->countdown_samps ) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ){ last_binsplit[ i ] = current_binsplit[ i ]; } } } int rand_index( int max) { int rand(); return ( rand() % max ); } void splitbank_setstate (t_splitbank *x, t_symbol *msg, short argc, t_atom *argv) { short i; if( argc != x->N2 ){ error("list must be of length %d, but actually was %d", x->N2, argc); return; } for( i = 0; i < x->N2; i++ ){ x->last_binsplit[ i ] = x->current_binsplit[ i ]; x->current_binsplit[ i ] = 0; } for (i=0; i < argc; i++) { x->current_binsplit[i] = atom_getintarg(i, argc, argv ); } x->frames_left = x->ramp_frames; if(! x->ramp_frames) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ){ x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } return; } void splitbank_ramptime (t_splitbank *x, t_symbol *msg, short argc, t_atom *argv) { float rampdur; rampdur = atom_getfloatarg(0,argc,argv) * 0.001; x->countdown_samps = rampdur * x->R; x->counter = 0; // return; } // REPORT CURRENT SHUFFLE STATUS void splitbank_showstate (t_splitbank *x ) { t_atom *list_data = x->list_data; short i, count; count = 0; // post("showing %d data points", x->N2); for( i = 0; i < x->N2; i++ ) { SETFLOAT(list_data+count,x->current_binsplit[i]); ++count; } outlet_list(x->list_outlet,0L,x->N2,list_data); return; } /* void splitbank_float(t_splitbank *x, t_float f) // Look at floats at inlets { int inlet = ((t_pxobject*)x)->z_in; int N2 = x->obank1->N2; // inlet 0 is the first signal inlet if (inlet == 1) { x->obank1->pitch_increment = f * x->obank1->table_si; } else if (inlet == 2) { x->obank2->pitch_increment = f * x->obank2->table_si; } else if (inlet == 3) { x->obank3->pitch_increment = f * x->obank3->table_si; } else if (inlet == 4) { x->obank4->pitch_increment = f * x->obank4->table_si; } else if (inlet == 5) { x->obank5->pitch_increment = f * x->obank5->table_si; } else if (inlet == 6) { x->obank6->pitch_increment = f * x->obank6->table_si; } else if (inlet == 7) { x->obank7->pitch_increment = f * x->obank7->table_si; } else if (inlet == 8) { x->obank8->pitch_increment = f * x->obank8->table_si; } else if (inlet == 9) { x->obank1->synthesis_threshold = f; x->obank2->synthesis_threshold = f; x->obank3->synthesis_threshold = f; x->obank4->synthesis_threshold = f; x->obank5->synthesis_threshold = f; x->obank6->synthesis_threshold = f; x->obank7->synthesis_threshold = f; x->obank8->synthesis_threshold = f; } else if (inlet == 10) { x->table_offset = (int) (f * N2); } else if (inlet == 11) { x->bin_offset = (int) (f * N2); } else if (inlet == 12) { x->manual_control_value = f; } } */ void splitbank_split(t_splitbank *x, int *binsplit, float *dest_mag, int start, int end ) { int i; int bindex; int n = x->N2; float *in_amps = x->in_amps; int table_offset = x->table_offset; int bin_offset = x->bin_offset; if( table_offset < 0 ) table_offset *= -1; if( bin_offset < 0 ) bin_offset *= -1; for( i = start; i < end; i++){ bindex = binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; dest_mag[ bindex * 2 ] = in_amps[ bindex ]; // putting amps into interleaved spectrum } } void splitbank_spliti( t_splitbank *x, float *dest_mag, int start, int end, float oldfrac) { int i; int bindex; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; float *current_mag = x->current_mag; float *last_mag = x->last_mag; float *in_amps = x->in_amps; int bin_offset = x->bin_offset; int table_offset = x->table_offset; int n = x->N2; float newfrac; float phase; if( oldfrac < 0 ) oldfrac = 0; if( oldfrac > 1.0 ) oldfrac = 1.0; if( x->powerfade ){ phase = oldfrac * PIOVERTWO; oldfrac = sin( phase ); newfrac = cos( phase ); } else { newfrac = 1.0 - oldfrac; } if( table_offset < 0 ) table_offset *= -1; if( bin_offset < 0 ) bin_offset *= -1; for( i = 0; i < n; i++ ){ last_mag[i] = current_mag[i] = 0.0; } for( i = start; i < end; i++ ){ bindex = current_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; current_mag[ bindex ] = in_amps[ bindex ]; bindex = last_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; last_mag[ bindex ] = in_amps[ bindex ]; } for( i = 0; i < n; i++){ if(! current_mag[i] && ! last_mag[i]){ dest_mag[i * 2] = 0.0; } else if( current_mag[i] && last_mag[i]) { dest_mag[i * 2] = current_mag[i]; } else if ( current_mag[i] && ! last_mag[i] ) { dest_mag[i * 2] = newfrac * current_mag[i]; } else { dest_mag[i * 2] = oldfrac * last_mag[i]; } } } void splitbank_dsp(t_splitbank *x, t_signal **sp) { int i; int R; int lo_freq = 0; int hi_freq = 15000; int fftsize; int overlap = x->overlap; t_int **sigvec; int pointer_count; int channel_count = x->channel_count; int vector_size; t_oscbank **obanks = x->obanks; pointer_count = (channel_count * 2) + 8; sigvec = (t_int **) malloc(sizeof(t_int *) * pointer_count); for(i = 0; i < pointer_count; i++){ sigvec[i] = (t_int *) calloc(sizeof(t_int),1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } x->vector_size = vector_size = sp[0]->s_n; fftsize = vector_size * overlap; // post("vector size %d, sys vector size: %d",vector_size, sys_getblksize() ); // post("splitbank~: samples per vector: %d, sys blocksize %d, fftsize %d", // sp[0]->s_n, sys_getblksize(), fftsize); // generate FFT size from x->overlap * x->vector_size if( ! sp[0]->s_sr ){ error("splitbank~: zero sample rate! Perhaps no audio driver is selected."); return; } if(x->initialize || x->R != sys_getsr() || x->vector_size != sp[0]->s_n || x->N != fftsize){ if( (x->initialize || x->R != sys_getsr()) && (! x->countdown_samps) ){ x->counter = 0; x->countdown_samps = 1.0 * x->R; // 1 second fade time by default } x->R = sys_getsr(); R = (int) x->R; x->N = fftsize; x->N2 = fftsize / 2; x->list_data = malloc((x->N + 2) * sizeof(t_atom)); x->last_binsplit = malloc(x->N2 * sizeof(int)); x->current_binsplit = malloc(x->N2 * sizeof(int)); x->bin_tmp = malloc(x->N2 * sizeof(int)); x->last_mag = malloc(x->N2 * sizeof(float)); x->current_mag = malloc(x->N2 * sizeof(float)); x->stored_slots = malloc(x->N2 * sizeof(short)); x->stored_binsplits = malloc(MAXSTORE * sizeof(int *)); for( i = 0; i < MAXSTORE; i++ ){ x->stored_binsplits[i] = malloc(x->N2 * sizeof(int)); } splitbank_scramble( x ); for( i = 0; i < x->N2; i++ ){ x->last_binsplit[i] = x->current_binsplit[i]; } for(i = 0; i < channel_count; i++){ fftease_obank_initialize(obanks[i], lo_freq, hi_freq, overlap, R, vector_size,x->N); } x->in_amps = malloc((x->N +2) * sizeof(float)); x->initialize = 0; } x->hopsamps = x->N / x->overlap; dsp_addv(splitbank_perform, pointer_count, (t_int *) sigvec); free(sigvec); } //////////////////////////////////////// /**************************************************/ void fftease_obank_destroy( t_oscbank *x ) { free(x->Wanal); free(x->Wsyn); free(x->Hwin); free(x->complex_spectrum); free(x->interleaved_spectrum); free(x->input_buffer); free(x->output_buffer); free(x->c_lastphase_in); free(x->lastamp); free(x->lastfreq); free(x->index); free(x->table); free(x->bitshuffle); free(x->trigland); free(x); } /**************************************************/ void fftease_obank_initialize ( t_oscbank *x, float lo_freq, float hi_freq, int overlap, int R, int vector_size, int N) { int i; x->overlap = overlap; // x = t_getbytes( sizeof(t_oscbank) ); // CRASH!! x->R = R; x->vector_size = vector_size; x->N = N; x->Nw = x->N; x->N2 = (x->N)>>1; x->Nw2 = (x->Nw)>>1; x->in_count = -(x->Nw); x->table_length = OSCBANK_TABLE_LENGTH ; // x->topfreq = OSCBANK_DEFAULT_TOPFREQ ; x->user_lofreq = lo_freq; x->user_hifreq = hi_freq; x->synthesis_threshold = .000001; x->table_si = (float) x->table_length/ (float) x->R; x->Wanal = (float *) malloc( x->Nw * sizeof(float) ); x->Wsyn = (float *) malloc( x->Nw * sizeof(float) ); x->Hwin = (float *) malloc( x->Nw * sizeof(float) ); x->complex_spectrum = (float *) malloc( x->N * sizeof(float) ); x->interleaved_spectrum = (float *) malloc( (x->N + 2) * sizeof(float) ); x->input_buffer = (float *) malloc( x->Nw * sizeof(float) ); x->output_buffer = (float *) malloc( x->Nw * sizeof(float) ); x->c_lastphase_in = (float *) malloc( (x->N2+1) * sizeof(float) ); x->c_lastphase_out = (float *) malloc( (x->N2+1) * sizeof(float) ); x->lastamp = (float *) malloc( (x->N+1) * sizeof(float) ); x->lastfreq = (float *) malloc( (x->N+1) * sizeof(float) ); x->index = (float *) malloc( (x->N+1) * sizeof(float) ); x->table = (float *) malloc( x->table_length * sizeof(float) ); x->bitshuffle = (int *) malloc( (x->N * 2) * sizeof( int ) ); x->trigland = (float *) malloc( (x->N * 2) * sizeof( float ) ); x->mult = 1. / (float) x->N; for( i = 0; i < x->N2 + 1; i++) { x->c_lastphase_in[i] = x->c_lastphase_out[i] = 0.0; } for( i = 0; i < x->N + 1; i++) { x->lastamp[i] = x->lastfreq[i] = x->index[i] = 0.0; } for( i = 0; i < x->Nw; i++ ){ x->input_buffer[i] = x->output_buffer[i] = 0.0; } init_rdft( x->N, x->bitshuffle, x->trigland); makehanning( x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->vector_size, 0); x->c_fundamental = (float) x->R/(float)x->N ; x->c_factor_in = (float) x->R/((float)x->vector_size * TWOPI); x->c_factor_out = 1.0 / x->c_factor_in; if( x->user_hifreq < x->c_fundamental ) { x->user_hifreq = OSCBANK_DEFAULT_TOPFREQ ; } x->hi_bin = 1; x->curfreq = 0; while( x->curfreq < x->user_hifreq ) { ++(x->hi_bin); x->curfreq += x->c_fundamental ; } x->lo_bin = 0; x->curfreq = 0; while( x->curfreq < x->user_lofreq ) { ++(x->lo_bin); x->curfreq += x->c_fundamental ; } if( x->hi_bin > x->N2) x->hi_bin = x->N2 ; for ( i = 0; i < x->table_length; i++ ) { x->table[i] = (float) x->N * cos( (float)i * TWOPI / (float)x->table_length ); } x->P = 1.0 ; x->i_vector_size = 1. / x->vector_size; x->pitch_increment = x->P * x->table_length/x->R; /* post("*** oscbank OO ***"); post("initialized oscbank!"); post("synthesizing %d bins", x->hi_bin - x->lo_bin); post("FFTsize %d, overlap %d", x->N, x->overlap); post("vector size %d, Nw %d", x->vector_size, x->Nw); post("*** initialization done! ***"); */ } /**************************************************/ void fftease_obank_topfreq( t_oscbank *x, float topfreq ) { if( topfreq < x->c_fundamental ) { topfreq = OSCBANK_DEFAULT_TOPFREQ ; } x->hi_bin = 1; x->curfreq = 0; while( x->curfreq < topfreq ) { ++(x->hi_bin); x->curfreq += x->c_fundamental ; } if( x->hi_bin > x->N2) x->hi_bin = x->N2 ; } /**************************************************/ void fftease_obank_bottomfreq( t_oscbank *x, float bottomfreq ) { x->lo_bin = 0; x->curfreq = 0; while( x->curfreq < bottomfreq ) { ++(x->lo_bin); x->curfreq += x->c_fundamental ; } } /**************************************************/ void fftease_obank_analyze( t_oscbank *x ) { fold( x->input_buffer, x->Wanal, x->Nw, x->complex_spectrum, x->N, x->in_count ); rdft( x->N, 1, x->complex_spectrum, x->bitshuffle, x->trigland ); convert( x->complex_spectrum, x->interleaved_spectrum, x->N2, x->c_lastphase_in, x->c_fundamental, x->c_factor_in ); } /**************************************************/ void fftease_shiftin( t_oscbank *x, float *input ) { int i; int vector_size = x->vector_size; int Nw = x->Nw; float *input_buffer = x->input_buffer; for ( i = 0 ; i < (Nw - vector_size) ; i++ ){ input_buffer[i] = input_buffer[i + vector_size]; } for ( i = (Nw - vector_size) ; i < Nw; i++ ) { input_buffer[i] = *input++; } } /**************************************************/ void fftease_shiftout( t_oscbank *x, float *output ) { int i; int vector_size = x->vector_size; int Nw = x->Nw; float *output_buffer = x->output_buffer; float mult = x->mult; for ( i = 0; i < vector_size; i++ ){ *output++ = output_buffer[i] * mult; } for ( i = 0; i < Nw - vector_size; i++ ){ output_buffer[i] = output_buffer[i + vector_size]; } for ( i = Nw - vector_size; i < Nw; i++ ){ output_buffer[i] = 0.; } x->in_count += vector_size; } /**************************************************/ void fftease_obank_synthesize( t_oscbank *x ) { int amp, chan, freq; float a,ainc,f,finc,address; int n; float synthesis_threshold = x->synthesis_threshold; float *lastfreq = x->lastfreq; float *lastamp = x->lastamp; int table_length = x->table_length; float *output_buffer = x->output_buffer; int vector_size = x->vector_size; float i_vector_size = x->i_vector_size; int lo_bin = x->lo_bin; int hi_bin = x->hi_bin; float *interleaved_spectrum = x->interleaved_spectrum; float pitch_increment = x->pitch_increment; float *index = x->index; float *table = x->table; for ( chan = lo_bin; chan < hi_bin; chan++ ) { freq = ( amp = ( chan << 1 ) ) + 1; if ( interleaved_spectrum[amp] > synthesis_threshold ){ interleaved_spectrum[freq] *= pitch_increment; finc = ( interleaved_spectrum[freq] - ( f = lastfreq[chan] ) ) * i_vector_size; ainc = ( interleaved_spectrum[amp] - ( a = lastamp[chan] ) ) * i_vector_size; address = index[chan]; for ( n = 0; n < vector_size; n++ ) { output_buffer[n] += a*table[ (int) address ]; address += f; while ( address >= table_length ) address -= table_length; while ( address < 0 ) address += table_length; a += ainc; f += finc; } lastfreq[chan] = interleaved_spectrum[freq]; lastamp[chan] = interleaved_spectrum[amp]; index[chan] = address; } } } //////////////////////// void init_rdft(int n, int *ip, float *w) { int nw, nc; void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); nw = n >> 2; makewt(nw, ip, w); nc = n >> 2; makect(nc, ip, w + nw); return; } void rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; void bitrv2(int n, int *ip, float *a), cftsub(int n, float *a, float *w), rftsub(int n, float *a, int nc, float *c); nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { rftsub(n, a, nc, w + nw); bitrv2(n, ip + 2, a); } cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { bitrv2(n, ip + 2, a); } cftsub(n, a, w); if (n > 4) { rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void bitrv2(int n, int *ip, float *a) { int j, j1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += m2; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void cftsub(int n, float *a, float *w) { int j, j1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * (x0r - x0i); a[j1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * x0r - wk1i * x0i; a[j1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = a[j + 1] - a[j1 + 1]; a[j] += a[j1]; a[j + 1] += a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } } } void rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void makewt(int nw, int *ip, float *w) { void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } bitrv2(nw, ip + 2, w); } } void makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) { float phase, phasediff; int real, imag, amp, freq; float a, b; int i; /* float myTWOPI, myPI; */ /* double sin(), cos(), atan(), hypot();*/ /* myTWOPI = 8.*atan(1.); myPI = 4.*atan(1.); */ for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); if ( C[amp] == 0. ) phasediff = 0.; else { phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; lastphase[i] = phase; while ( phasediff > PI ) phasediff -= TWOPI; while ( phasediff < -PI ) phasediff += TWOPI; } C[freq] = phasediff*factor + i*fundamental; } } \ No newline at end of file diff --git a/externals/lyonpotpourri/splitspec~-help.pd b/externals/lyonpotpourri/splitspec~-help.pd new file mode 100755 index 000000000..d20dec413 --- /dev/null +++ b/externals/lyonpotpourri/splitspec~-help.pd @@ -0,0 +1,396 @@ +#N canvas 323 22 903 531 10; +#X obj 34 134 noise~; +#N canvas 68 56 1321 800 splitspec-rfft 0; +#X obj 33 76 inlet~; +#X obj 34 461 outlet~; +#X obj 33 108 windowvec~; +#X obj 33 146 rfft~, f 6; +#X obj 34 531 block~ 1024 8; +#X obj 33 181 cartopol~; +#X obj 34 335 poltocar~; +#X obj 34 365 rifft~; +#X obj 34 428 windowvec~; +#X obj 34 395 *~ 0; +#X obj 1107 163 *; +#X msg 1059 85 1 1024 8; +#X obj 1059 116 unpack f f f; +#X obj 1059 195 /; +#X floatatom 1059 227 12 0 0 0 - - -, f 12; +#X text 962 228 rescale factor; +#X obj 1059 54 loadbang; +#X obj 1058 256 s \$0-rescale; +#X obj 68 385 r \$0-rescale; +#X obj 161 469 outlet~; +#X obj 161 343 poltocar~; +#X obj 161 373 rifft~; +#X obj 161 436 windowvec~; +#X obj 161 403 *~ 0; +#X obj 195 393 r \$0-rescale; +#X obj 280 469 outlet~; +#X obj 280 343 poltocar~; +#X obj 280 373 rifft~; +#X obj 280 436 windowvec~; +#X obj 280 403 *~ 0; +#X obj 314 393 r \$0-rescale; +#X obj 407 477 outlet~; +#X obj 407 351 poltocar~; +#X obj 407 381 rifft~; +#X obj 407 444 windowvec~; +#X obj 407 411 *~ 0; +#X obj 441 401 r \$0-rescale; +#X obj 537 479 outlet~; +#X obj 537 353 poltocar~; +#X obj 537 383 rifft~; +#X obj 537 446 windowvec~; +#X obj 537 413 *~ 0; +#X obj 571 403 r \$0-rescale; +#X obj 664 487 outlet~; +#X obj 664 361 poltocar~; +#X obj 664 391 rifft~; +#X obj 664 454 windowvec~; +#X obj 664 421 *~ 0; +#X obj 698 411 r \$0-rescale; +#X obj 783 487 outlet~; +#X obj 783 361 poltocar~; +#X obj 783 391 rifft~; +#X obj 783 454 windowvec~; +#X obj 783 421 *~ 0; +#X obj 817 411 r \$0-rescale; +#X obj 910 495 outlet~; +#X obj 910 369 poltocar~; +#X obj 910 399 rifft~; +#X obj 910 462 windowvec~; +#X obj 910 429 *~ 0; +#X obj 944 419 r \$0-rescale; +#X obj 198 73 inlet; +#X obj 501 100 inlet; +#X obj 562 100 inlet; +#X obj 626 98 inlet; +#X obj 1335 1235 outlet; +#X obj 1082 337 outlet; +#X obj 35 282 splitspec~ 8, f 159; +#X text 124 531 determines FFT size of 1024 with overlap factor 8; +#X msg 1066 382 set \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 +\$13 \$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21 \$22 \$23 \$24 \$25 \$26 +\$27 \$28 \$29 \$30 \$31 \$32 \$33 \$34 \$35 \$36 \$37 \$38 \$39 \$40 +\$41 \$42 \$43 \$44 \$45 \$46 \$47 \$48 \$49 \$50 \$51 \$52 \$53 \$54 +\$55 \$56 \$57 \$58 \$59 \$60 \$61 \$62 \$63 \$64 \$65 \$66 \$67 \$68 +\$69 \$70 \$71 \$72 \$73 \$74 \$75 \$76 \$77 \$78 \$79 \$80 \$81 \$82 +\$83 \$84 \$85 \$86 \$87 \$88 \$89 \$90 \$91 \$92 \$93 \$94 \$95 \$96 +\$97 \$98 \$99 \$100 \$101 \$102 \$103 \$104 \$105 \$106 \$107 \$108 +\$109 \$110 \$111 \$112 \$113 \$114 \$115 \$116 \$117 \$118 \$119 \$120 +\$121 \$122 \$123 \$124 \$125 \$126 \$127 \$128 \$129 \$130 \$131 \$132 +\$133 \$134 \$135 \$136 \$137 \$138 \$139 \$140 \$141 \$142 \$143 \$144 +\$145 \$146 \$147 \$148 \$149 \$150 \$151 \$152 \$153 \$154 \$155 \$156 +\$157 \$158 \$159 \$160 \$161 \$162 \$163 \$164 \$165 \$166 \$167 \$168 +\$169 \$170 \$171 \$172 \$173 \$174 \$175 \$176 \$177 \$178 \$179 \$180 +\$181 \$182 \$183 \$184 \$185 \$186 \$187 \$188 \$189 \$190 \$191 \$192 +\$193 \$194 \$195 \$196 \$197 \$198 \$199 \$200 \$201 \$202 \$203 \$204 +\$205 \$206 \$207 \$208 \$209 \$210 \$211 \$212 \$213 \$214 \$215 \$216 +\$217 \$218 \$219 \$220 \$221 \$222 \$223 \$224 \$225 \$226 \$227 \$228 +\$229 \$230 \$231 \$232 \$233 \$234 \$235 \$236 \$237 \$238 \$239 \$240 +\$241 \$242 \$243 \$244 \$245 \$246 \$247 \$248 \$249 \$250 \$251 \$252 +\$253 \$254 \$255 \$256 \$257 \$258 \$259 \$260 \$261 \$262 \$263 \$264 +\$265 \$266 \$267 \$268 \$269 \$270 \$271 \$272 \$273 \$274 \$275 \$276 +\$277 \$278 \$279 \$280 \$281 \$282 \$283 \$284 \$285 \$286 \$287 \$288 +\$289 \$290 \$291 \$292 \$293 \$294 \$295 \$296 \$297 \$298 \$299 \$300 +\$301 \$302 \$303 \$304 \$305 \$306 \$307 \$308 \$309 \$310 \$311 \$312 +\$313 \$314 \$315 \$316 \$317 \$318 \$319 \$320 \$321 \$322 \$323 \$324 +\$325 \$326 \$327 \$328 \$329 \$330 \$331 \$332 \$333 \$334 \$335 \$336 +\$337 \$338 \$339 \$340 \$341 \$342 \$343 \$344 \$345 \$346 \$347 \$348 +\$349 \$350 \$351 \$352 \$353 \$354 \$355 \$356 \$357 \$358 \$359 \$360 +\$361 \$362 \$363 \$364 \$365 \$366 \$367 \$368 \$369 \$370 \$371 \$372 +\$373 \$374 \$375 \$376 \$377 \$378 \$379 \$380 \$381 \$382 \$383 \$384 +\$385 \$386 \$387 \$388 \$389 \$390 \$391 \$392 \$393 \$394 \$395 \$396 +\$397 \$398 \$399 \$400 \$401 \$402 \$403 \$404 \$405 \$406 \$407 \$408 +\$409 \$410 \$411 \$412 \$413 \$414 \$415 \$416 \$417 \$418 \$419 \$420 +\$421 \$422 \$423 \$424 \$425 \$426 \$427 \$428 \$429 \$430 \$431 \$432 +\$433 \$434 \$435 \$436 \$437 \$438 \$439 \$440 \$441 \$442 \$443 \$444 +\$445 \$446 \$447 \$448 \$449 \$450 \$451 \$452 \$453 \$454 \$455 \$456 +\$457 \$458 \$459 \$460 \$461 \$462 \$463 \$464 \$465 \$466 \$467 \$468 +\$469 \$470 \$471 \$472 \$473 \$474 \$475 \$476 \$477 \$478 \$479 \$480 +\$481 \$482 \$483 \$484 \$485 \$486 \$487 \$488 \$489 \$490 \$491 \$492 +\$493 \$494 \$495 \$496 \$497 \$498 \$499 \$500 \$501 \$502 \$503 \$504 +\$505 \$506 \$507 \$508 \$509 \$510 \$511, f 45; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 5 1; +#X connect 5 0 67 0; +#X connect 5 1 67 1; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 13 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 10 0; +#X connect 12 2 10 1; +#X connect 13 0 14 0; +#X connect 14 0 17 0; +#X connect 16 0 11 0; +#X connect 18 0 9 1; +#X connect 20 0 21 0; +#X connect 20 1 21 1; +#X connect 21 0 23 0; +#X connect 22 0 19 0; +#X connect 23 0 22 0; +#X connect 24 0 23 1; +#X connect 26 0 27 0; +#X connect 26 1 27 1; +#X connect 27 0 29 0; +#X connect 28 0 25 0; +#X connect 29 0 28 0; +#X connect 30 0 29 1; +#X connect 32 0 33 0; +#X connect 32 1 33 1; +#X connect 33 0 35 0; +#X connect 34 0 31 0; +#X connect 35 0 34 0; +#X connect 36 0 35 1; +#X connect 38 0 39 0; +#X connect 38 1 39 1; +#X connect 39 0 41 0; +#X connect 40 0 37 0; +#X connect 41 0 40 0; +#X connect 42 0 41 1; +#X connect 44 0 45 0; +#X connect 44 1 45 1; +#X connect 45 0 47 0; +#X connect 46 0 43 0; +#X connect 47 0 46 0; +#X connect 48 0 47 1; +#X connect 50 0 51 0; +#X connect 50 1 51 1; +#X connect 51 0 53 0; +#X connect 52 0 49 0; +#X connect 53 0 52 0; +#X connect 54 0 53 1; +#X connect 56 0 57 0; +#X connect 56 1 57 1; +#X connect 57 0 59 0; +#X connect 58 0 55 0; +#X connect 59 0 58 0; +#X connect 60 0 59 1; +#X connect 61 0 67 0; +#X connect 62 0 67 2; +#X connect 63 0 67 3; +#X connect 64 0 67 4; +#X connect 67 0 6 0; +#X connect 67 1 6 1; +#X connect 67 2 20 0; +#X connect 67 3 20 1; +#X connect 67 4 26 0; +#X connect 67 5 26 1; +#X connect 67 6 32 0; +#X connect 67 7 32 1; +#X connect 67 8 38 0; +#X connect 67 9 38 1; +#X connect 67 10 44 0; +#X connect 67 11 44 1; +#X connect 67 12 50 0; +#X connect 67 13 50 1; +#X connect 67 14 56 0; +#X connect 67 15 56 1; +#X connect 67 16 69 0; +#X connect 67 17 66 0; +#X connect 69 0 65 0; +#X restore 34 164 pd splitspec-rfft; +#X obj 720 115 hsl 128 15 0 1 0 0 empty empty manual_override_controller +-2 -8 0 10 -204786 -1 -1 0 1; +#X obj 362 111 hsl 128 15 0 1 0 0 empty empty table_offset -2 -8 0 +10 -204786 -1 -1 0 1; +#X obj 525 112 hsl 128 15 0 1 0 0 empty empty bin_offset -2 -8 0 10 +-204786 -1 -1 0 1; +#X obj 108 124 r splitspec-help-msgs; +#N canvas 197 462 750 354 messages 0; +#X msg 322 119 scramble; +#X obj 440 85 metro 5000; +#X obj 440 51 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 44 180 spiral; +#X obj 395 154 loadbang; +#X msg 395 183 ramptime 5000; +#X msg 527 243 manual_override \$1; +#X obj 527 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 461 45 use for constantly changing spectra; +#X msg 222 113 bypass \$1; +#X obj 222 87 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 337 302 s splitspec-help-msgs; +#X text 545 206 slider control of x-fade amount; +#X text 245 86 turn off spectral splitting; +#X text 490 176 interpolation time in ms.; +#X text 91 175 spiral configuration; +#X text 27 27 break into contiguous blocks of spectrum (power of 2 +only); +#X msg 30 55 squantize 7; +#X text 381 120 scramble bin assignments; +#X connect 0 0 11 0; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 11 0; +#X connect 4 0 5 0; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 7 0 6 0; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 17 0 11 0; +#X restore 34 381 pd messages; +#X msg 114 381 <- how it works; +#X floatatom 34 457 5 0 0.25 0 - - -, f 5; +#X obj 37 432 hsl 128 15 0 2 0 0 empty empty gain -2 -8 0 10 -204800 +-1 -1 1900 1; +#X obj 34 485 s splitspec-help-mgain; +#N canvas 0 22 1204 446 gain8 0; +#X obj 36 44 inlet~; +#X obj 36 106 outlet~; +#X obj 36 76 *~; +#X obj 79 44 r splitspec-help-mgain; +#X obj 223 44 inlet~; +#X obj 223 106 outlet~; +#X obj 223 76 *~; +#X obj 266 44 r splitspec-help-mgain; +#X obj 409 44 inlet~; +#X obj 409 106 outlet~; +#X obj 409 76 *~; +#X obj 452 44 r splitspec-help-mgain; +#X obj 596 44 inlet~; +#X obj 596 106 outlet~; +#X obj 596 76 *~; +#X obj 639 44 r splitspec-help-mgain; +#X obj 781 44 inlet~; +#X obj 781 106 outlet~; +#X obj 781 76 *~; +#X obj 824 44 r splitspec-help-mgain; +#X obj 968 44 inlet~; +#X obj 968 106 outlet~; +#X obj 968 76 *~; +#X obj 1011 44 r splitspec-help-mgain; +#X obj 1154 44 inlet~; +#X obj 1154 106 outlet~; +#X obj 1154 76 *~; +#X obj 1197 44 r splitspec-help-mgain; +#X obj 1341 44 inlet~; +#X obj 1341 106 outlet~; +#X obj 1341 76 *~; +#X obj 1384 44 r splitspec-help-mgain, f 35; +#X connect 0 0 2 0; +#X connect 2 0 1 0; +#X connect 3 0 2 1; +#X connect 4 0 6 0; +#X connect 6 0 5 0; +#X connect 7 0 6 1; +#X connect 8 0 10 0; +#X connect 10 0 9 0; +#X connect 11 0 10 1; +#X connect 12 0 14 0; +#X connect 14 0 13 0; +#X connect 15 0 14 1; +#X connect 16 0 18 0; +#X connect 18 0 17 0; +#X connect 19 0 18 1; +#X connect 20 0 22 0; +#X connect 22 0 21 0; +#X connect 23 0 22 1; +#X connect 24 0 26 0; +#X connect 26 0 25 0; +#X connect 27 0 26 1; +#X connect 28 0 30 0; +#X connect 30 0 29 0; +#X connect 31 0 30 1; +#X restore 34 222 pd gain8; +#X floatatom 433 230 5 0 0 0 sync-phase - -, f 5; +#N canvas 244 54 590 399 storage 0; +#X obj 191 298 s splitspec-help-msgs; +#X msg 85 125 store \$1; +#X msg 80 82 1; +#X msg 119 79 2; +#X msg 159 80 3; +#X msg 202 178 recall \$1; +#X msg 212 133 1; +#X msg 251 130 2; +#X msg 291 131 3; +#X text 247 55 store and then recall bin configuration patterns; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 1 0; +#X connect 4 0 1 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 8 0 5 0; +#X restore 201 431 pd storage; +#X obj 28 12 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 27 50 splitspec~ - divides a spectrum into N separate parts +(N must be a power of 2 \, less than the FFT size) \, which can then +be spatialized. Smooth transitions between spectral divisions are provided. +, f 105; +#X text 271 430 <- save configurations; +#N canvas 0 22 450 300 current-bin-configuration 0; +#X obj 124 56 inlet; +#X msg 123 105 344 165 79 39 487 386 236 27 213 462 284 439 293 160 +1 173 201 242 130 144 417 274 372 119 179 332 270 24 290 348 203 111 +176 492 271 420 187 312 13 224 300 100 258 246 60 158 327 508 46 477 +345 279 45 136 97 51 351 225 159 161 147 499 260 223 425 506 470 373 +63 357 197 62 421 194 114 503 272 278 207 32 189 44 422 387 354 367 +219 59 353 375 167 306 511 440 449 50 464 450 495 340 168 253 301 57 +58 346 479 65 445 259 443 23 143 155 127 286 389 472 388 364 198 264 +292 22 295 285 240 177 399 328 314 31 403 384 329 505 333 82 442 321 +231 126 113 476 56 359 303 99 311 336 238 378 496 254 228 202 204 72 +317 125 437 133 396 444 134 391 428 86 8 243 460 80 42 256 393 195 +115 371 108 182 129 41 95 172 16 356 413 435 360 392 395 283 252 17 +49 211 19 199 233 335 501 459 451 482 36 419 310 424 221 307 475 116 +85 426 394 247 276 96 215 347 510 70 137 488 153 71 467 26 474 416 +73 257 458 78 145 380 226 304 163 491 25 191 415 282 54 318 77 87 309 +152 33 298 407 208 232 162 411 269 216 47 409 365 322 418 452 402 432 +148 343 326 463 188 457 2 28 98 447 109 214 83 489 112 414 193 493 +206 75 190 69 7 21 61 140 131 12 196 52 498 5 308 366 43 406 149 230 +92 478 3 456 29 281 355 209 106 4 423 81 484 461 88 118 299 368 169 +102 40 323 363 504 485 164 483 123 239 138 481 150 277 234 170 241 +291 383 379 34 267 382 174 358 64 280 132 507 48 350 181 494 268 124 +139 429 408 180 324 9 370 398 210 453 465 401 294 468 319 142 369 427 +251 38 89 53 55 471 227 390 220 473 249 412 405 266 128 454 30 157 +446 330 84 117 212 93 37 448 433 305 341 74 222 287 217 15 244 146 +349 35 381 338 337 385 186 6 185 110 122 331 11 289 175 288 361 245 +397 184 250 265 18 362 120 68 66 192 316 229 235 248 273 325 455 237 +377 490 297 502 91 486 218 410 497 441 438 313 94 10 302 20 436 339 +103 261 90 104 342 320 76 434 480 135 0 430 101 296 151 334 509 262 +469 107 275 263 315 404 205 178 352 121 141 156 67 183 14 166 171 200 +255 374 105 500 400 154 431 466; +#X msg 176 27 showstate; +#X obj 176 55 s splitspec-help-msgs; +#X connect 0 0 1 0; +#X connect 2 0 3 0; +#X restore 547 214 pd current-bin-configuration; +#X obj 34 348 dac~ 1 2 3 4 5 6 7 8, f 35; +#X connect 0 0 1 0; +#X connect 1 0 11 0; +#X connect 1 1 11 1; +#X connect 1 2 11 2; +#X connect 1 3 11 3; +#X connect 1 4 11 4; +#X connect 1 5 11 5; +#X connect 1 6 11 6; +#X connect 1 7 11 7; +#X connect 1 8 12 0; +#X connect 1 9 17 0; +#X connect 2 0 1 4; +#X connect 3 0 1 2; +#X connect 4 0 1 3; +#X connect 5 0 1 1; +#X connect 8 0 10 0; +#X connect 9 0 8 0; +#X connect 11 0 18 0; +#X connect 11 1 18 1; +#X connect 11 2 18 2; +#X connect 11 3 18 3; +#X connect 11 4 18 4; +#X connect 11 5 18 5; +#X connect 11 6 18 6; +#X connect 11 7 18 7; diff --git a/externals/lyonpotpourri/splitspec~.c b/externals/lyonpotpourri/splitspec~.c new file mode 100755 index 000000000..e88ca3e2f --- /dev/null +++ b/externals/lyonpotpourri/splitspec~.c @@ -0,0 +1,722 @@ +#include "MSPd.h" + +#define MAXSTORE (128) +#define OBJECT_NAME "splitspec~" + +/* Pd version of splitspec~ */ + +static t_class *splitspec_class; + +typedef struct _splitspec +{ + t_object x_obj; + t_float x_f; + int N; + int N2; + void *list_outlet; + void *phase_outlet; + t_atom *list_data; + // Avoid buffer sharing overwrites with local copies + t_float *inmag_loc; + t_float *inphase_loc; + t_float *t_offset_loc; + t_float *b_offset_loc; + t_float *manual_control_loc; + float frame_duration; + int table_offset; + int bin_offset; + float *last_mag; + float *current_mag; + int *last_binsplit; + int *current_binsplit; + int **stored_binsplits; + short *stored_slots; + short new_distribution; + short interpolation_completed; + short bypass; + short initialize; + int manual_override; + long countdown_samps; // samps for a given fadetime + long counter; + int overlap_factor; // compensate for overlap in fade + float sr; + float fl_phase; // show phase as float + int hopsamps; // number of samples to hop + int channel_count; // number of channels to split + t_clock *phase_clock; + t_float **magvecs;// connect to mag input vectors + t_float **phasevecs;// point to phase input vectors +} t_splitspec; + +void *splitspec_new(t_symbol *s, int argc, t_atom *argv); +t_int *offset_perform(t_int *w); +t_int *splitspec_perform(t_int *w); +void splitspec_dsp(t_splitspec *x, t_signal **sp); +void splitspec_showstate( t_splitspec *x ); +void splitspec_bypass( t_splitspec *x, t_floatarg toggle); +void splitspec_manual_override( t_splitspec *x, t_floatarg toggle ); +void splitspec_setstate (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv); +void splitspec_ramptime (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv); +int rand_index( int max); +void splitspec_scramble (t_splitspec *x); +void splitspec_spiral(t_splitspec *x); +void splitspec_squantize(t_splitspec *x, t_floatarg blockbins); +void splitspec_overlap( t_splitspec *x, t_floatarg factor); + +void splitspec_store( t_splitspec *x, t_floatarg floc); +void splitspec_recall( t_splitspec *x, t_floatarg floc); +void splitspeci( int *current_binsplit, int *last_binsplit, int bin_offset, int table_offset, + float *current_mag, float *last_mag, float *inmag, float *dest_mag, int start, int end, int n, + float oldfrac, float newfrac ); +void splitspec( int *binsplit, int bin_offset, int table_offset, + float *inmag, float *dest_mag, int start, int end, int n ); + +void splitspec_dsp_free( t_splitspec *x ); + +void splitspec_phaseout(t_splitspec *x); +int splitspec_closestPowerOfTwo(int p); +void splitspec_tilde_setup(void){ + splitspec_class = class_new(gensym("splitspec~"), (t_newmethod)splitspec_new, + (t_method)splitspec_dsp_free, sizeof(t_splitspec),0,A_GIMME,0); + + /* splitspec_class = class_new(gensym("splitspec~"), (t_newmethod)splitspec_new, + 0, sizeof(t_splitspec),0,A_GIMME,0); */ + CLASS_MAINSIGNALIN(splitspec_class, t_splitspec, x_f); + class_addmethod(splitspec_class, (t_method)splitspec_dsp, gensym("dsp"),0); + class_addmethod(splitspec_class, (t_method)splitspec_showstate, gensym("showstate"),0); + class_addmethod(splitspec_class, (t_method)splitspec_scramble, gensym("scramble"),0); + class_addmethod(splitspec_class, (t_method)splitspec_spiral, gensym("spiral"),0); + class_addmethod(splitspec_class, (t_method)splitspec_squantize, gensym("squantize"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_manual_override, gensym("manual_override"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_bypass, gensym("bypass"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_store, gensym("store"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_recall, gensym("recall"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_overlap, gensym("overlap"),A_FLOAT,0); + class_addmethod(splitspec_class, (t_method)splitspec_setstate, gensym("setstate"),A_GIMME,0); + class_addmethod(splitspec_class, (t_method)splitspec_ramptime, gensym("ramptime"),A_GIMME,0); + potpourri_announce(OBJECT_NAME); +} + +void splitspec_phaseout(t_splitspec *x) +{ + outlet_float(x->phase_outlet, x->fl_phase); +} + +void splitspec_overlap( t_splitspec *x, t_floatarg fol ) +{ + int overlap = (int)fol; + if( overlap < 2 ){ + post("splitspec~: illegal overlap %d",overlap); + } + x->overlap_factor = overlap; +} + +void splitspec_spiral(t_splitspec *x) +{ + int i,j,k; + int offset; + + int channel_count = x->channel_count; + int *current_binsplit = x->current_binsplit; + int *last_binsplit = x->last_binsplit; + + int N2 = x->N2; + + offset = N2 / channel_count; + + x->new_distribution = 1; + x->interpolation_completed = 0; + for( i = 0; i < N2; i++ ){ + last_binsplit[i] = current_binsplit[i]; + } + k = 0; + for( i = 0; i < N2 / channel_count; i++){ + for(j = 0; j < channel_count; j++){ + current_binsplit[i + (j * offset)] = k++; + } + } + if(! x->counter) { // Ramp Off - Immediately set last to current + for( i = 0; i < N2; i++ ){ + last_binsplit[ i ] = current_binsplit[ i ]; + } + } +} + +void splitspec_squantize(t_splitspec *x, t_floatarg bb) +{ + int i, j, k; + + int maxblock; + int iterations; + int bincount = 0; + int *current_binsplit = x->current_binsplit; + int *last_binsplit = x->last_binsplit; + int blockbins = (int) bb; + int N2 = x->N2; + int channel_count = x->channel_count; + blockbins = splitspec_closestPowerOfTwo( blockbins ); + maxblock = N2 / channel_count; + if( blockbins < 1 || blockbins > maxblock ){ + error("%d is out of bounds - must be between 1 and %d", blockbins, maxblock); + return; + } + + iterations = N2 / channel_count / blockbins; + x->new_distribution = 1; + x->interpolation_completed = 0; + + + for( i = 0; i < N2; i++ ){ + last_binsplit[i] = current_binsplit[i]; + } + + if( iterations == 1 ){ + for( i = 0; i < N2 ; i++ ){ + current_binsplit[i] = i; + } + } + else { + for( k = 0; k < iterations; k++ ) { + for( i = 0; i < N2; i += maxblock ){ + for( j = 0; j < blockbins; j++ ){ + if( i + j + k * blockbins < N2 ){ + current_binsplit[i + j + k * blockbins] = bincount++; + // post("assigning %d to position %d", bincount-1, i+j+k*blockbins); + } else { + // error("%d out of range", i + j + k * blockbins); + } + } + } + } + } + + +// x->frames_left = x->ramp_frames; + if(! x->counter) { // Ramp Off - Immediately set last to current + for( i = 0; i < N2; i++ ){ + last_binsplit[ i ] = current_binsplit[ i ]; + } + } +} + +void splitspec_bypass( t_splitspec *x, t_floatarg toggle ) +{ + x->bypass = (int)toggle; +} + +void splitspec_manual_override( t_splitspec *x, t_floatarg toggle ) +{ + x->manual_override = (int) toggle; +} + +void splitspec_dsp_free( t_splitspec *x ){ + int i; + if(x->initialize == 0){ + free(x->list_data); + free(x->last_binsplit); + free(x->current_binsplit); + free(x->last_mag); + free(x->current_mag); + free(x->stored_slots); + for(i = 0; i < MAXSTORE; i++){ + free(x->stored_binsplits[i]); + } + free(x->stored_binsplits); + free(x->inmag_loc); + free(x->inphase_loc); + free(x->t_offset_loc); + free(x->b_offset_loc); + free(x->manual_control_loc); + free(x->magvecs); + free(x->phasevecs); + } +} + +void splitspeci( int *current_binsplit, int *last_binsplit, int bin_offset, int table_offset, + float *current_mag, float *last_mag, float *inmag, float *dest_mag, int start, int end, int n, + float oldfrac, float newfrac ) +{ + int i; + int bindex; + + for( i = 0; i < n; i++ ){ + last_mag[i] = current_mag[i] = 0.0; + } + for( i = start; i < end; i++ ){ + bindex = current_binsplit[ (i + table_offset) % n ]; + bindex = ( bindex + bin_offset ) % n; + current_mag[ bindex ] = inmag[ bindex ]; + bindex = last_binsplit[ (i + table_offset) % n ]; + bindex = ( bindex + bin_offset ) % n; + last_mag[ bindex ] = inmag[ bindex ]; + } + for( i = 0; i < n; i++){ + if(! current_mag[i] && ! last_mag[i]){ + dest_mag[i] = 0.0; + } else { + dest_mag[i] = oldfrac * last_mag[i] + newfrac * current_mag[i]; + } + } + +} + +void splitspec( int *binsplit, int bin_offset, int table_offset, + float *inmag, float *dest_mag, int start, int end, int n ) +{ + int i; + int bindex; + // n is actually N2 + for( i = start; i < end; i++){ + bindex = binsplit[ (i + table_offset) % n ]; + bindex = ( bindex + bin_offset ) % n; + dest_mag[ bindex ] = inmag[ bindex ]; + } +} + + +void splitspec_store( t_splitspec *x, t_floatarg floc) +{ + int **stored_binsplits = x->stored_binsplits; + int *current_binsplit = x->current_binsplit; + short *stored_slots = x->stored_slots; + int location = (int)floc; + int i; + + if( location < 0 || location > MAXSTORE - 1 ){ + error("location must be between 0 and %d, but was %d", MAXSTORE, location); + return; + } + for(i = 0; i < x->N2; i++ ){ + stored_binsplits[location][i] = current_binsplit[i]; + } + stored_slots[location] = 1; + +// post("stored bin split at location %d", location); +} + +void splitspec_recall( t_splitspec *x, t_floatarg floc) +{ + int **stored_binsplits = x->stored_binsplits; + int *current_binsplit = x->current_binsplit; + int *last_binsplit = x->last_binsplit; + short *stored_slots = x->stored_slots; + int i; + int location = (int)floc; + if( location < 0 || location > MAXSTORE - 1 ){ + error("location must be between 0 and %d, but was %d", MAXSTORE, location); + return; + } + if( ! stored_slots[location] ){ + error("nothing stored at location %d", location); + return; + } + + for(i = 0; i < x->N2; i++ ){ + last_binsplit[i] = current_binsplit[i]; + current_binsplit[i] = stored_binsplits[location][i]; + } + + x->new_distribution = 1; + x->interpolation_completed = 0; + // x->frames_left = x->ramp_frames; + if(! x->counter) { // Ramp Off - Immediately set last to current + for( i = 0; i < x->N2; i++ ){ + x->last_binsplit[ i ] = x->current_binsplit[ i ]; + } + } +} + +void *splitspec_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + t_splitspec *x = (t_splitspec *)pd_new(splitspec_class); + + // x->channel_count = 8; // hard wire just for now + x->channel_count = (int) atom_getfloatarg(0, argc, argv); + x->channel_count = splitspec_closestPowerOfTwo( x->channel_count ); + // post("Channel count is: %d", x->channel_count); + srand( time( 0 ) ); + + for(i=0; i < 4; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); + } + for(i=0; i < x->channel_count * 2; i++){ + outlet_new(&x->x_obj, gensym("signal")); + } + x->list_outlet = (t_outlet *) outlet_new(&x->x_obj, gensym("list")); // to report random distribution + x->phase_outlet = (t_outlet *) outlet_new((t_object *)x, &s_float); + x->phase_clock = (t_clock *) clock_new((void *)x, (t_method)splitspec_phaseout); + x->bypass = 0; + x->table_offset = 0; + x->bin_offset = 0; + + x->sr = sys_getsr(); + x->counter = 0; + x->overlap_factor = 8; // default + + x->countdown_samps = 1.0 * x->sr; // 1 second fade time by default + + x->initialize = 1; + x->manual_override = 0; + + x->inmag_loc = (t_float *) calloc(8192,sizeof(t_float)); + x->inphase_loc = (t_float *) calloc(8192,sizeof(t_float)); + x->t_offset_loc = (t_float *) calloc(8192,sizeof(t_float)); + x->b_offset_loc = (t_float *) calloc(8192,sizeof(t_float)); + x->manual_control_loc = (t_float *) calloc(8192,sizeof(t_float)); + x->magvecs = (t_float **) malloc(x->channel_count * sizeof(t_float *)); + x->phasevecs = (t_float **) malloc(x->channel_count * sizeof(t_float *)); + return x; +} + +int splitspec_closestPowerOfTwo(int p){ + int base = 2; + while(base < p){ + base *= 2; + } + return base; +} + +t_int *splitspec_perform(t_int *w) +{ + + int i, j; + + t_splitspec *x = (t_splitspec *) (w[1]); + int channel_count = x->channel_count; + + float *inmag = (t_float *)(w[2]); + float *inphase = (t_float *)(w[3]); + float *t_offset = (t_float *)(w[4]); + float *b_offset = (t_float *)(w[5]); + float *manual_control = (t_float *)(w[6]); + + t_float **magvecs = x->magvecs; + t_float **phasevecs = x->phasevecs; + int n = (int) w[7 + (channel_count * 2)]; + + int table_offset = x->table_offset; + int bin_offset = x->bin_offset; + + int *current_binsplit = x->current_binsplit; + int *last_binsplit = x->last_binsplit; + float *last_mag = x->last_mag; + float *current_mag = x->current_mag; + long counter = x->counter; + long countdown_samps = x->countdown_samps; + float frac, oldgain, newgain; + t_float *inmag_loc = x->inmag_loc; + t_float *inphase_loc = x->inphase_loc; + t_float *t_offset_loc = x->t_offset_loc; + t_float *b_offset_loc = x->b_offset_loc; + t_float *manual_control_loc = x->manual_control_loc; + int next_ptr = 8 + (channel_count * 2); + int hopsamps = x->hopsamps; + int N2 = x->N2; + /****/ + + // copy inputs to local buffers + + for(i = 0; i < n; i++){ + inmag_loc[i] = inmag[i]; + inphase_loc[i] = inphase[i]; + t_offset_loc[i] = t_offset[i]; + b_offset_loc[i] = b_offset[i]; + manual_control_loc[i] = manual_control[i]; + } + + // assign local vector pointers + for(i = 0, j= 0; i < channel_count * 2; i+=2, j++){ + magvecs[j] = (t_float *) w[ 7 + i ]; + phasevecs[j] = (t_float *) w[ 8 + i ]; + } + + table_offset = *t_offset_loc * n; + bin_offset = *b_offset_loc * n; + + if( table_offset < 0 ) + table_offset *= -1; + if( bin_offset < 0 ) + bin_offset *= -1; + + + // n == fftsize / 2 (N2) + // n is the number of "bins", and is also the number of values in each signal vector + + if( x->bypass ){ + for( i = 0; i < n; i++){ + for(j = 0; j < channel_count; j++){ + magvecs[j][i] = inmag_loc[i] * 0.5;; + phasevecs[j][i] = inphase_loc[i]; + } + } + return (w + next_ptr); + } + + // ZERO OUT MAGNITUDES AND COPY PHASES TO OUTPUT + for( i = 0; i < n; i++ ){ + for(j = 0; j < channel_count; j++){ + magvecs[j][i] = 0.0; + phasevecs[j][i] = inphase_loc[i]; + } + } + + // Special case of live control over interpolation + if( x->manual_override ){ + + // do interpolation + frac = *manual_control_loc; + // sanity check here + if( frac < 0 ) { frac = 0; } + if( frac >1.0 ){ frac = 1.0; } + oldgain = cos( frac * PIOVERTWO ); + newgain = sin( frac * PIOVERTWO ); + + for(j = 0; j < channel_count; j++){ + splitspeci( current_binsplit, last_binsplit, bin_offset, table_offset, + current_mag, last_mag, inmag_loc, magvecs[j], + N2*j/channel_count, N2*(j+1)/channel_count, N2, oldgain, newgain ); + } + return (w + next_ptr); + } + + // Normal operation + if( x->new_distribution ){ + x->new_distribution = 0; + // put out contents of last distribution + for(j = 0; j < channel_count; j++){ + splitspec(last_binsplit, bin_offset, table_offset, inmag_loc, magvecs[j], + N2*j/channel_count, N2*(j+1)/channel_count, N2); + } + frac = 0.0; + + } else if ( x->interpolation_completed ) { + // put out contents of current distribution + for(j = 0; j < channel_count; j++){ + splitspec(current_binsplit, bin_offset, table_offset, inmag_loc, magvecs[j], + N2*j/channel_count, N2*(j+1)/channel_count, N2); + } + frac = 1.0; + } else { + // do interpolation + frac = (float) counter / (float) countdown_samps; + oldgain = cos( frac * PIOVERTWO ); + newgain = sin( frac * PIOVERTWO ); + for(j = 0; j < channel_count; j++){ + splitspeci( current_binsplit, last_binsplit, bin_offset, table_offset, + current_mag, last_mag, inmag_loc, magvecs[j], + N2*j/channel_count, N2*(j+1)/channel_count, N2, oldgain, newgain ); + } + // end of interpolation + + counter += hopsamps; + if( counter >= countdown_samps ) + { + counter = countdown_samps; + x->interpolation_completed = 1; + } + } + + x->fl_phase = frac; + clock_delay(x->phase_clock,0.0); // send current phase to float outlet + x->counter = counter; + return (w + next_ptr); +} + + +void splitspec_scramble (t_splitspec *x) +{ + int i; + + int max = x->N2; + int swapi, tmp; + int N2 = x->N2; + int *current_binsplit = x->current_binsplit; + int *last_binsplit = x->last_binsplit; + + x->new_distribution = 1; + x->interpolation_completed = 0; + + // Copy current mapping to last mapping (first time this will be all zeros) + + for( i = 0; i < x->N2; i++ ){ + last_binsplit[i] = current_binsplit[i]; + } + + for( i = 0; i < N2; i++ ){ + current_binsplit[i] = i; + } + max = N2; + for(i = 0; i < N2; i++){ + swapi = rand() % max; + tmp = current_binsplit[swapi]; + current_binsplit[swapi] = current_binsplit[max - 1]; + current_binsplit[max - 1] = tmp; + --max; + } + /* + for(i = 0; i < N2; i++){ + post("i: %d, dex: %d", i, current_binsplit[i]); + } + */ + x->counter = 0; + if(! x->countdown_samps ) { // Ramp Off - Immediately set last to current + for( i = 0; i < x->N2; i++ ){ + last_binsplit[ i ] = current_binsplit[ i ]; + } + } +} + + +void splitspec_setstate (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv) { + short i; + + if( argc != x->N2 ){ + error("list must be of length %d, but actually was %d", x->N2, argc); + return; + } + for( i = 0; i < x->N2; i++ ){ + x->last_binsplit[ i ] = x->current_binsplit[ i ]; + x->current_binsplit[ i ] = 0; + } + for (i=0; i < argc; i++) { + x->current_binsplit[i] = atom_getintarg(i, argc, argv ); + + } + // x->frames_left = x->ramp_frames; + if(!x->counter) { // Ramp Off - Immediately set last to current + for( i = 0; i < x->N2; i++ ){ + x->last_binsplit[ i ] = x->current_binsplit[ i ]; + } + } + + return; +} + +void splitspec_ramptime (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv) { + float rampdur; + + rampdur = atom_getfloatarg(0,argc,argv) * 0.001; // convert from milliseconds + x->countdown_samps = rampdur * x->sr; + x->counter = 0; + // post("countdown samps :%d", x->countdown_samps ); +} + +// REPORT CURRENT SHUFFLE STATUS +void splitspec_showstate (t_splitspec *x ) { + + t_atom *list_data = x->list_data; + + short i, count; + + count = 0; + // post("showing %d data points", x->N2); + + if(! x->initialize){ + for( i = 0; i < x->N2; i++ ) { + SETFLOAT(list_data+count,(float)x->current_binsplit[i]); + ++count; + } + outlet_list(x->list_outlet,0,x->N2,list_data); + } + return; +} + +void splitspec_dsp(t_splitspec *x, t_signal **sp) +{ + int i; + float R, funda; + int vector_size; + t_int **sigvec; + int pointer_count; + vector_size = sys_getblksize(); + + pointer_count = (x->channel_count * 2) + 7; + sigvec = (t_int **) malloc(sizeof(t_int *) * pointer_count); + for(i = 0; i < pointer_count; i++){ + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + } + sigvec[0] = (t_int *)x; // first pointer is to the object + sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) + for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + + /* + + FFT size (N) == vector size. (Pd only. Max has a different approach.) + There is one vector with the magnitudes, and another with the phases, each of size . + Therefore N2+2 (or the vector size/2 + 1) is the actual number of bins. + Therefore N2/split is the number of bins assigned to each splitted channel. + + */ + // post("vector size %d, sys vector size: %d",vector_size, sys_getblksize() ); + // post("splitspec: samples per vector: %d, sys blocksize %d", sp[0]->s_n, sys_getblksize()); + if( ! sp[0]->s_sr ){ + error("splitspec~: zero sample rate!"); + return; + } + + + if( x->initialize || x->sr != sys_getsr() || x->N != sp[0]->s_n){ + + x->sr = sys_getsr(); + x->N = sp[0]->s_n; + x->N2 = sp[0]->s_n / 2; + // post("FFT size is %d, N2 is %d",x->N, x->N2); + R = sys_getsr(); +// post("sampling rate: %f, vector thinks it is: %f", sys_getsr(), sp[0]->s_sr); + funda = R / (2. * (float) x->N) ; + + if(x->initialize){ + x->list_data = (t_atom *) calloc((x->N + 2),sizeof(t_atom)); + x->last_binsplit = (int *) calloc( x->N2,sizeof(int)); + x->current_binsplit = (int *) calloc( x->N2,sizeof(int)); + x->last_mag = (float *) calloc(x->N2,sizeof(float)) ; + x->current_mag = (float *) calloc(x->N2,sizeof(float)) ; + x->stored_slots = (short *) calloc(x->N2,sizeof(short)); + x->stored_binsplits = (int **) calloc(MAXSTORE,sizeof(int *)); + for( i = 0; i < MAXSTORE; i++ ){ + x->stored_binsplits[i] = (int *)calloc(x->N2,sizeof(int)); + } + } else { + x->list_data = (t_atom *) realloc((void *)x->list_data,(x->N + 2) * sizeof(t_atom)); + x->last_binsplit = (int *) realloc((void *)x->last_binsplit,x->N2 * sizeof(int)); + x->current_binsplit = (int *) realloc((void *)x->current_binsplit,x->N2 * sizeof(int)); + x->last_mag = (float *) realloc((void *)x->last_mag,x->N2 * sizeof(float)); + x->current_mag = (float *) realloc((void *)x->current_mag,x->N2 * sizeof(float)); + x->stored_slots = (short *) realloc((void *)x->stored_slots,x->N2 * sizeof(short)); + for( i = 0; i < MAXSTORE; i++ ){ + x->stored_binsplits[i] = (int *) realloc((void *)x->stored_binsplits[i],x->N2 * sizeof(int)); + } + for(i = 0; i < x->N2; i++){ + x->last_mag[i] = 0.0; + x->current_mag[i] = 0.0; + x->current_binsplit[i] = i; + x->last_binsplit[i] = i; + } + } + + x->frame_duration = (float) sp[0]->s_n / sp[0]->s_sr; + + splitspec_scramble( x ); + for( i = 0; i < x->N2; i++ ){ + x->last_binsplit[i] = x->current_binsplit[i]; + } + + x->initialize = 0; + x->counter = 0; + } + + if(vector_size == 0) { + // post("zero vector size!"); + return; + } else { + x->hopsamps = x->N / x->overlap_factor; +// post("hop samps: %d, overlap: %d", x->hopsamps, x->overlap_factor); + } + dsp_addv(splitspec_perform, pointer_count, (t_int *) sigvec); + free(sigvec); +} + + diff --git a/externals/lyonpotpourri/squash~-help.pd b/externals/lyonpotpourri/squash~-help.pd new file mode 100755 index 000000000..f56091d1b --- /dev/null +++ b/externals/lyonpotpourri/squash~-help.pd @@ -0,0 +1,85 @@ +#N canvas 670 336 409 359 10; +#X obj 20 229 squash~; +#X obj 14 14 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#N canvas 565 63 450 300 taps 0; +#X obj 43 111 noise~; +#X obj 118 79 metro 1000; +#X msg 118 56 1; +#X obj 118 33 loadbang; +#X obj 168 201 line~; +#X obj 63 226 *~; +#X obj 63 260 outlet~; +#X msg 118 155 1; +#X msg 209 176 0.05 50; +#X msg 271 176 0.01 900; +#X msg 340 177 0 50; +#X obj 209 149 delay 1; +#X obj 271 149 delay 50; +#X obj 339 149 delay 900; +#X connect 0 0 5 0; +#X connect 1 0 7 0; +#X connect 1 0 11 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 7 0 4 0; +#X connect 8 0 4 0; +#X connect 9 0 4 0; +#X connect 10 0 4 0; +#X connect 11 0 8 0; +#X connect 11 0 12 0; +#X connect 12 0 9 0; +#X connect 12 0 13 0; +#X connect 13 0 10 0; +#X restore 20 170 pd taps; +#X obj 20 273 *~ 0.1; +#X obj 20 308 dac~; +#X floatatom 59 253 5 0 0 0 - squash-gain -, f 5; +#X obj 66 308 hsl 128 15 0 0.1 0 0 squash-gain empty gain -2 -8 0 10 +-261682 -1 -1 4400 1; +#X obj 49 196 r squash.messages; +#N canvas 741 67 448 403 squash-controls 0; +#X obj 31 130 s squash.messages; +#X msg 31 106 ratio \$1; +#X obj 34 62 hsl 128 15 0.5 1 0 0 empty empty ratio -2 -8 0 10 -204786 +-1 -1 0 1; +#X floatatom 31 86 5 0 0 0 - - -, f 5; +#X obj 29 234 s squash.messages; +#X obj 32 166 hsl 128 15 0 0.001 0 0 empty empty noise_threshold -2 +-8 0 10 -204786 -1 -1 0 1; +#X floatatom 29 190 7 0 0 0 - - -, f 7; +#X msg 29 210 nt \$1; +#X text 171 165 set noise floor; +#X obj 28 347 s squash.messages; +#X obj 31 279 hsl 128 15 0 1 0 0 empty empty compression_threshold +-2 -8 0 10 -204786 -1 -1 1000 1; +#X floatatom 28 303 7 0 0 0 - - -, f 7; +#X msg 28 323 thresh \$1; +#X text 170 278 set compression threshold; +#X text 29 18 lower ratio values give higher compression \, values +greater than 1 result in expansion.; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 4 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 9 0; +#X restore 111 243 pd squash-controls; +#X text 16 50 squash~ is based on a compression algorithm by Christopher +Penrose. It can be useful for extreme effects \, and is notable for +employing the overlap-add system found in FFTease externals \, though +all processing is done in the time domain here. This processor is capable +of generating extreme amplitude ranges. Use with caution \, with a +low playback gain \, and do not use this external in performance until +you are very familiar with its operation.; +#X connect 0 0 3 0; +#X connect 2 0 0 0; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 5 0 3 1; +#X connect 7 0 0 0; diff --git a/externals/lyonpotpourri/squash~.c b/externals/lyonpotpourri/squash~.c new file mode 100755 index 000000000..0719eadb6 --- /dev/null +++ b/externals/lyonpotpourri/squash~.c @@ -0,0 +1,437 @@ +#include "MSPd.h" + + +#define OBJECT_NAME "squash~" + +/* Pd version of squash~ */ + +static t_class *squash_class; + + +typedef struct _squash +{ + + t_object x_obj; + t_float x_f; + int D; + int N; + int Nw; + int N2; + int incnt; + int outcnt; + float *Wanal; + float *Wsyn; + float *Hwin; + float *buffer; + float *input; + float *output; + float thresh; + float ratio; + float nt; + float nmult; + short mute; +} t_squash; + + +float boundrand(float min, float max); +void *squash_new(t_symbol *msg, short argc, t_atom *argv); +void squash_mute(t_squash *x, t_floatarg toggle); +void squash_assist (t_squash *x, void *b, long msg, long arg, char *dst); +void squash_dsp_free(t_squash *x); +double squash_squat( float *buffer, float thresh, float ratio, float nt, float nmult, int N ); +void squash_mute(t_squash *x, t_floatarg f); +void squash_thresh(t_squash *x, t_floatarg f); +void squash_nt(t_squash *x, t_floatarg f); +void squash_ratio(t_squash *x, t_floatarg f); +void squash_nmult(t_squash *x, t_floatarg f); +void squash_mute(t_squash *x, t_floatarg f); +void squash_free(t_squash *x); +void squash_dsp(t_squash *x, t_signal **sp); +void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ); +void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ); +void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ); +void fold( float *I, float *W, int Nw, float *O, int N, int n ); +void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); +/* +void squash_perform64(t_squash *x, t_object *dsp64, double **ins, + long numins, double **outs,long numouts, long n, + long flags, void *userparam); +void squash_dsp64(t_squash *x, t_object *dsp64, short *count, double sr, long n, long flags); +*/ +/* +int main(void) +{ + t_class *c; + c = class_new("el.squash~", (method)squash_new, (method)squash_free, sizeof(t_squash), 0,A_GIMME,0); + + class_addmethod(c, (method)squash_dsp64, "dsp64", A_CANT, 0); + class_addmethod(c, (method)squash_assist,"assist",A_CANT,0); + class_addmethod(c,(method)squash_thresh, "thresh", A_FLOAT, 0); + class_addmethod(c,(method)squash_nt, "nt", A_FLOAT, 0); + class_addmethod(c,(method)squash_nmult, "nmult", A_FLOAT, 0); + class_addmethod(c,(method)squash_ratio, "ratio", A_FLOAT, 0); + class_addmethod(c,(method)squash_mute, "mute", A_FLOAT, 0); + class_register(CLASS_BOX, c); + squash_class = c; + + potpourri_announce(OBJECT_NAME); + return 0; +} +*/ + +void squash_tilde_setup(void){ + squash_class = class_new(gensym("squash~"), (t_newmethod)squash_new, + (t_method)squash_free, sizeof(t_squash),0,A_GIMME,0); + CLASS_MAINSIGNALIN(squash_class, t_squash, x_f); + class_addmethod(squash_class, (t_method)squash_dsp, gensym("dsp"),0); + class_addmethod(squash_class,(t_method)squash_thresh, gensym("thresh"), A_FLOAT, 0); + class_addmethod(squash_class,(t_method)squash_nt, gensym("nt"), A_FLOAT, 0); + class_addmethod(squash_class,(t_method)squash_nmult, gensym("nmult"), A_FLOAT, 0); + class_addmethod(squash_class,(t_method)squash_ratio, gensym("ratio"), A_FLOAT, 0); + class_addmethod(squash_class,(t_method)squash_mute, gensym("mute"), A_FLOAT, 0); + potpourri_announce(OBJECT_NAME); +} + +void *squash_new(t_symbol *msg, short argc, t_atom *argv) +{ + + t_squash *x = (t_squash *)pd_new(squash_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->D = sys_getblksize(); + x->N = x->D * 4; + x->Nw = x->N; + x->N2 = x->N / 2; + x->incnt = - x->Nw; + x->Wanal = (float *) calloc(x->Nw,sizeof(float)); + x->Wsyn = (float *) calloc(x->Nw, sizeof(float)); + x->Hwin = (float *) calloc(x->Nw, sizeof(float)); + x->input = (float *) calloc(x->Nw, sizeof(float)); + x->output = (float *) calloc(x->Nw, sizeof(float)); + x->buffer = (float *) calloc(x->N, sizeof(float)); + makehanning(x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->D, 0); + x->thresh = 0.1; + x->ratio = 1.; + x->nt = .0000001; + x->nmult = 0.1; + x->mute = 0; + return x; +} + + +void squash_free(t_squash *x) +{ + free(x->Wanal); + free(x->Wsyn); + free(x->Hwin); + free(x->input); + free(x->output); + free(x->buffer); +} + +void makewindows( float *H, float *A, float *S, int Nw, int N, int I ) + +{ + int i ; + float sum ; + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ; + + if ( Nw > N ) { + float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + float afac = 2./sum ; + float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} + + + + +void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ) + +{ + int i; + float sum ; + + + + if (odd) { + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) )); + } + + else { + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ); + + } + + if ( Nw > N ) { + float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + float afac = 2./sum ; + float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} + + + +void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) +{ + int i; + float sum ; + + + if (odd) { + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); + } + + else { + + for ( i = 0 ; i < Nw ; i++ ) + H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); + + } + + if ( Nw > N ) { + float x ; + + x = -(Nw - 1)/2. ; + for ( i = 0 ; i < Nw ; i++, x += 1. ) + if ( x != 0. ) { + A[i] *= N*sin( PI*x/N )/(PI*x) ; + if ( I ) + S[i] *= I*sin( PI*x/I )/(PI*x) ; + } + } + for ( sum = i = 0 ; i < Nw ; i++ ) + sum += A[i] ; + + for ( i = 0 ; i < Nw ; i++ ) { + float afac = 2./sum ; + float sfac = Nw > N ? 1./afac : afac ; + A[i] *= afac ; + S[i] *= sfac ; + } + + if ( Nw <= N && I ) { + for ( sum = i = 0 ; i < Nw ; i += I ) + sum += S[i]*S[i] ; + for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) + S[i] *= sum ; + } +} + +void fold( float *I, float *W, int Nw, float *O, int N, int n ) + +{ + + int i; + + for ( i = 0; i < N; i++ ) + O[i] = 0.; + + while ( n < 0 ) + n += N; + n %= N; + for ( i = 0; i < Nw; i++ ) { + O[n] += I[i]*W[i]; + if ( ++n == N ) + n = 0; + } +} + +void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ) + +{ + int i ; + while ( n < 0 ) + n += N ; + n %= N ; + for ( i = 0 ; i < Nw ; i++ ) { + O[i] += I[n]*W[i] ; + if ( ++n == N ) + n = 0 ; + } +} + + +void squash_mute(t_squash *x, t_floatarg f){ + x->mute = (short)f; +} + +void squash_thresh(t_squash *x, t_floatarg f){ + x->thresh = (float)f; +} + +void squash_nt(t_squash *x, t_floatarg f){ + x->nt = (float)f; +} + +void squash_ratio(t_squash *x, t_floatarg f){ + x->ratio = (float)f; +} + +void squash_nmult(t_squash *x, t_floatarg f){ + x->nmult = (float)f; +} + +t_int *squash_perform(t_int *w) +{ + t_squash *x = (t_squash *) (w[1]); + float *in = (t_float *)(w[2]); + float *out = (t_float *)(w[3]); + int n = (int) w[4]; + + int j; + float *input = x->input; + float *output = x->output; + int D = x->D; + int Nw = x->Nw; + int N = x->N; + float *buffer = x->buffer; + float *Wanal = x->Wanal; + float *Wsyn = x->Wsyn; + float thresh = x->thresh; + float ratio = x->ratio; + float nt = x->nt; + float nmult = x->nmult; + + if(x->mute){ + memset((void *)out, 0, n * sizeof(float) ); + return w + 5; + } + + x->incnt += D; + + for ( j = 0 ; j < Nw - D ; j++ ) + input[j] = input[j+D]; + + for ( j = Nw-D; j < Nw; j++ ) { + input[j] = *in++; + } + fold( input, Wanal, Nw, buffer, N, x->incnt ); + squash_squat( buffer, thresh, ratio, nt, nmult, Nw ); + overlapadd( buffer, N, Wsyn, output, Nw, x->incnt ); + + for ( j = 0; j < D; j++ ) + *out++ = output[j]; + + for ( j = 0; j < Nw - D; j++ ) + output[j] = output[j+D]; + + for ( j = Nw - D; j < Nw; j++ ) + output[j] = 0.; + + x->incnt = x->incnt % Nw; + return w + 5; +} + +/* +void squash_dsp64(t_squash *x, t_object *dsp64, short *count, double sr, long n, long flags) +{ + if(!sr) + return; + if(n != x->D ){ + x->D = n; + error("squash~: blocksize change not implemented yet!"); + } + + object_method(dsp64, gensym("dsp_add64"),x,squash_perform64,0,NULL); +} +*/ + +void squash_dsp(t_squash *x, t_signal **sp) +{ + if(sp[0]->s_n != x->D ){ + x->D = sp[0]->s_n; + error("blocksize change not implemented yet!"); + } else { + dsp_add(squash_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); + } +} + +#define DIAG 0 + +/* compression/expansion routine! */ + +double squash_squat( float *buffer, float thresh, float ratio, float nt, float nmult, int N ) +{ + register int i; + double rms = 0.; + float dbthr; + register float mult; + + dbthr = 10. * log10(thresh); + + + for ( i=0; i < N; i++ ) + rms += ( *(buffer+i) * *(buffer+i) ); + + rms = sqrt(rms/(float)N); + if (rms < nt && ratio < 1.) + mult = nmult; + else + mult = pow( 10., (( dbthr - (( dbthr - (10. * log10(rms)) ) * ratio) ) / 10.) ) / rms; + + if (DIAG) { + if (rms <= thresh) + fprintf(stderr,"below dbthr: %f dbrms: %f rms: %f mult: %f\n", dbthr, (10. * log10(rms)), rms, mult); + else + fprintf(stderr,"above dbthr: %f dbrms: %f rms: %f mult: %f\n", dbthr, (10. * log10(rms)), rms, mult); + } + + for ( i=0; i < N; i++ ) + *(buffer+i) *= mult; + + return rms; +} + + diff --git a/externals/lyonpotpourri/stutter~-help.pd b/externals/lyonpotpourri/stutter~-help.pd new file mode 100755 index 000000000..aacd4e093 --- /dev/null +++ b/externals/lyonpotpourri/stutter~-help.pd @@ -0,0 +1,124 @@ +#N canvas 173 944 422 326 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array sound1 62079 float 2; +#X coords 0 1 62079 -1 100 70 1; +#X restore 19 101 graph; +#X obj 27 278 dac~; +#N canvas 1642 1031 502 352 messages 0; +#X obj 22 122 s stutter.messages; +#X text 20 15 extrema for echo count; +#X text 23 148 extrema for loop duration; +#N canvas 586 175 450 300 pattern-storage 0; +#X obj 29 46 s stutter.messages; +#X msg 29 13 show_loop; +#X text 118 15 print current loop; +#X text 169 83 setloop (start sample \, sample duration); +#X obj 26 113 s stutter.messages; +#X msg 26 79 set_loop 6951 3000; +#X obj 30 187 s stutter.messages; +#X msg 30 153 store_loop 1; +#X obj 25 249 s stutter.messages; +#X msg 25 215 recall_loop 1; +#X text 128 213 recall loop 1; +#X text 127 154 store current loop in location 1; +#X text 25 277 you can store up to 1024 different loops in locations +0-1023; +#X connect 1 0 0 0; +#X connect 5 0 4 0; +#X connect 7 0 6 0; +#X connect 9 0 8 0; +#X restore 313 149 pd pattern-storage; +#X obj 43 257 s stutter.messages; +#X obj 43 199 unpack f f; +#X msg 45 172 90 40; +#X msg 108 172 1000 200; +#X msg 43 226 max_looptime \$1; +#X msg 172 226 min_looptime \$1; +#X text 176 173 order: max \, min; +#X obj 320 112 s stutter.messages; +#X msg 320 55 lockme \$1; +#X obj 320 27 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 564 177 450 300 refinements 0; +#X obj 43 257 s stutter.messages; +#X msg 93 232 taper 5; +#X msg 43 200 taper 50; +#X text 111 199 softer envelope; +#X text 153 235 harder envelope; +#X text 44 183 taper duration in ms.; +#X obj 30 101 s stutter.messages; +#X msg 30 75 randomize_dur \$1; +#X floatatom 30 51 5 0 0 0 - - -, f 5; +#X obj 33 26 hsl 128 15 0 0.2 0 0 empty empty empty -2 -8 0 10 -129795 +-1 -1 0 1; +#X obj 193 104 s stutter.messages; +#X floatatom 193 54 5 0 0 0 - - -, f 5; +#X obj 196 29 hsl 128 15 0 0.2 0 0 empty empty empty -2 -8 0 10 -129795 +-1 -1 0 1; +#X msg 193 77 randomize_start \$1; +#X text 25 7 random loop deviations; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 7 0 6 0; +#X connect 8 0 7 0; +#X connect 9 0 8 0; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 10 0; +#X restore 313 179 pd refinements; +#X msg 328 76 new_loop; +#X text 340 29 lock current loop; +#X text 392 76 force new; +#X msg 22 58 minmax_echo 2 4; +#X msg 75 87 minmax_echo 5 20; +#X msg 190 89 minmax_echo 1 2; +#X msg 153 38 min_echo 1; +#X msg 172 61 max_echo 2; +#X connect 5 0 8 0; +#X connect 5 1 9 0; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 8 0 4 0; +#X connect 9 0 4 0; +#X connect 12 0 11 0; +#X connect 13 0 12 0; +#X connect 15 0 11 0; +#X connect 18 0 0 0; +#X connect 19 0 0 0; +#X connect 20 0 0 0; +#X connect 21 0 0 0; +#X connect 22 0 0 0; +#X restore 131 126 pd messages; +#X text 126 100 use a fairly long and varied sound here; +#N canvas 9 465 466 316 load-soundfile 0; +#X obj 31 177 soundfiler; +#X msg 30 103 bang; +#X obj 30 129 openpanel; +#X msg 30 151 read -resize \$1 sound1; +#X obj 11 57 loadbang; +#X obj 105 40 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X msg 10 82 read -resize examples/voice.wav sound1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X restore 129 82 pd load-soundfile; +#X obj 27 253 *~ 0.1; +#X obj 88 252 hsl 100 14 0 0.5 0 0 stutter.demo.gain empty empty -2 +-8 0 10 -174016 -1 -1 8400 1; +#X obj 5 10 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 218 127 <- open this for more info; +#X text 194 254 set master gain; +#X floatatom 66 232 5 0 0 0 - stutter.demo.gain -, f 5; +#X obj 27 209 stutter~ sound1 500 1000 30; +#X obj 27 184 r stutter.messages; +#X text 6 42 stutter~ - stutter-play an array; +#X connect 5 0 1 0; +#X connect 5 0 1 1; +#X connect 10 0 5 1; +#X connect 11 0 5 0; +#X connect 12 0 11 0; diff --git a/externals/lyonpotpourri/stutter~.c b/externals/lyonpotpourri/stutter~.c new file mode 100755 index 000000000..b65651589 --- /dev/null +++ b/externals/lyonpotpourri/stutter~.c @@ -0,0 +1,531 @@ +#include "MSPd.h" + +static t_class *stutter_class; +long rand_state = 0 ; + +#define OBJECT_NAME "stutter~" + +// REALLY MESSED UP - need to figure out 64-bit and may need to start from scratch + +/* still needs implementation for mono. Also update to use rand() function. + Also free memory function. Change from pre-inc/dec to normal form. + + Obviously this is a legacy external. Chopper probably does everything stutter does + only better. + */ + +typedef struct _stutter + { + t_object x_obj; + t_float x_f; + t_symbol *l_sym; + t_symbol *bufname; + t_garray *theBuffer; + t_garray *l_buf; + long l_chan; + /// + int loop_samps; + int samps_to_go ; + int loop_start; + int echos; + int min_echo; + int max_echo; + int b_index; + // + int taper_samps; + t_float taper_dur; + int loop_min_samps; + int loop_max_samps; + t_float loop_min_duration; + t_float loop_max_duration; + t_float taper_duration; + t_float R; + t_float ldev; + t_float st_dev; + int lock_loop; + int new_loop_loop; + t_float buffer_duration; + int framesize; + int bufchans; + short verbose; + short mute_me; + int *stored_starts; + int *stored_samps; + long b_valid; + //float *b_samples; + t_word *b_samples; + long b_frames; + } t_stutter; + +t_int *stutter_perform(t_int *w); + +void stutter_dsp(t_stutter *x, t_signal **sp); +void *stutter_new(t_symbol *msg, short argc, t_atom *argv); +void stutter_in1(t_stutter *x, long n); +void stutter_min_looptime(t_stutter *x, t_floatarg n); +void stutter_max_looptime(t_stutter *x, t_floatarg n); +void stutter_randomize_start(t_stutter *x, t_floatarg n); +void stutter_randomize_dur(t_stutter *x, t_floatarg n); +void stutter_lockme(t_stutter *x, t_floatarg n); +void stutter_new_loop(t_stutter *x); + +void stutter_assist(t_stutter *x, void *b, long m, long a, char *s); +void stutter_dblclick(t_stutter *x); +void stutter_verbose(t_stutter *x, t_floatarg t); +void stutter_mute(t_stutter *x, t_floatarg t); +void stutter_show_loop(t_stutter *x); +void stutter_set_loop(t_stutter *x, t_symbol *msg, short argc, t_atom *argv); +void stutter_store_loop(t_stutter *x, t_floatarg loop_b_index); +void stutter_recall_loop(t_stutter *x, t_floatarg loop_b_index); +void stutter_taper(t_stutter *x, t_floatarg f); +void stutter_min_echo(t_stutter *x, t_floatarg f); +void stutter_max_echo(t_stutter *x, t_floatarg f); +void stutter_minmax_echo(t_stutter *x, t_floatarg minf, t_floatarg maxf); +float boundrand(float min, float max); +void stutter_init(t_stutter *x,short initialized); +void stutter_info(t_stutter *x); +void stutter_version(t_stutter *x); +void stutter_setarray(t_stutter *x); +float erand(void); + +t_symbol *ps_buffer; + +void stutter_tilde_setup(void){ + stutter_class = class_new(gensym("stutter~"), (t_newmethod)stutter_new, + NO_FREE_FUNCTION,sizeof(t_stutter), 0,A_GIMME,0); + CLASS_MAINSIGNALIN(stutter_class, t_stutter, x_f); + class_addmethod(stutter_class,(t_method)stutter_dsp,gensym("dsp"),0); + class_addmethod(stutter_class,(t_method)stutter_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_show_loop,gensym("show_loop"),0); + class_addmethod(stutter_class,(t_method)stutter_set_loop,gensym("set_loop"),A_GIMME,0); + class_addmethod(stutter_class,(t_method)stutter_store_loop,gensym("store_loop"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_recall_loop,gensym("recall_loop"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_taper,gensym("taper"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_min_echo,gensym("min_echo"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_max_echo,gensym("max_echo"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_minmax_echo,gensym("minmax_echo"),A_FLOAT,A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_min_looptime,gensym("min_looptime"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_max_looptime,gensym("max_looptime"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_lockme,gensym("lockme"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_new_loop,gensym("new_loop"),0); + class_addmethod(stutter_class,(t_method)stutter_randomize_dur,gensym("randomize_dur"),A_FLOAT,0); + class_addmethod(stutter_class,(t_method)stutter_randomize_start,gensym("randomize_start"),A_FLOAT,0); + ps_buffer = gensym("buffer~"); + potpourri_announce(OBJECT_NAME); +} + +void stutter_mute(t_stutter *x, t_floatarg tog) +{ + x->mute_me = (int)tog; +} + +void stutter_verbose(t_stutter *x, t_floatarg tog) +{ + x->verbose = (int)tog; +} + + +void stutter_setarray(t_stutter *x) +{ + t_garray *b; + t_symbol *bufname = x->bufname; + int frames; + + if (!(b = (t_garray *)pd_findbyclass(bufname, garray_class))) + { + if (*bufname->s_name) pd_error(x, "stutter~: %s: no such array", + bufname->s_name); + x->b_valid = 0; + } + else if (!garray_getfloatwords(b, &frames, &x->b_samples)) + { + pd_error(x, "%s: bad template for stutter~", bufname->s_name); + x->b_samples = 0; + x->b_valid = 1; + } + else { + x->b_frames = frames; + x->b_valid = 1; + x->theBuffer = b; + garray_usedindsp(b); + } + //if(! x->b_valid ){ + // post("stutter~ got invalid buffer"); + //} +} + +t_int *stutter_perform(t_int *w) +{ + t_stutter *x = (t_stutter *)(w[1]); + t_float *out1 = (t_float *)(w[2]); + int n = (int) w[3]; + long b_frames = x->b_frames; + int next_pointer = 4; + t_word *tab; + t_float theSample; + long b_index; + int loop_start, samps_to_go, echos, loop_samps, taper_samps; + int loop_max_samps, loop_min_samps; + int lock_loop; + t_float sdev, ldev, startdev, st_dev; + + stutter_setarray(x); + + if(x->mute_me || ! x->b_valid) { + while( n-- ) { + *out1++ = 0.0; + } + return w+next_pointer; + } else { + + tab = x->b_samples; + b_frames = x->b_frames; + b_index = x->b_index; + loop_start = x->loop_start; + loop_samps = x->loop_samps; + samps_to_go = x->samps_to_go; + echos = x->echos; + taper_samps = x->taper_samps ; + loop_max_samps = x->loop_max_samps; + loop_min_samps = x->loop_min_samps; + ldev = x->ldev; + lock_loop = x->lock_loop; + st_dev = x->st_dev; + + if( x->framesize != b_frames ) { + x->framesize = b_frames; + x->buffer_duration = (float) b_frames / (float) x->R ; + } + + while( n-- ) { + if( b_index < 0 ){ + b_index = 0; + } else if( b_index > b_frames - 1) { + b_index = 0; + } + theSample = tab[ b_index ].w_float; + if( samps_to_go > loop_samps - taper_samps ){ + *out1++ = theSample * ( (float)(loop_samps - samps_to_go)/(float)taper_samps ); + ++b_index; + } else if( samps_to_go < taper_samps ) { + *out1++ = theSample * ( (float)(samps_to_go)/(float)taper_samps ); + ++b_index; + + } else { + *out1++ = theSample; + ++b_index; + } + if( ! --samps_to_go ){ + b_index = loop_start ; + sdev = ldev * loop_samps ; + if( erand() < .5 ){ + sdev = -sdev; + } + if( ( --echos <= 0 ) && ( ! lock_loop ) ) { + echos = (int)boundrand((float)x->min_echo,(float)x->max_echo); + samps_to_go = loop_samps = + loop_min_samps + ( erand() * (float)(loop_max_samps-loop_min_samps) ) ; + loop_start = erand() * (b_frames - loop_samps) ; + } else { + loop_samps += sdev; + + if( loop_samps < loop_min_samps ){ + loop_samps = loop_min_samps; + } else if( loop_samps > loop_max_samps ) { + loop_samps = loop_max_samps; + } + samps_to_go = loop_samps; + if( st_dev ) { + startdev = erand() * st_dev * (t_float) loop_samps; + if( erand() < .5 ){ + startdev = -startdev; + } + loop_start += startdev ; + if( loop_start < 0 ) { + loop_start = 0 ; + } else if ( loop_start + loop_samps > b_frames) { + loop_start = b_frames - loop_samps; + } + } + if( loop_start + loop_samps >= b_frames ){ + loop_start = (b_frames - loop_samps) - 1; + } + + } + } + } + x->b_index = b_index; + x->loop_start = loop_start; + x->loop_samps = loop_samps; + x->samps_to_go = samps_to_go; + x->echos = echos; + return w + next_pointer; + } +} + +float erand(void) { + static int im = 6075 ; + static int ia = 106 ; + static int ic = 1283 ; + rand_state = (rand_state * ia + ic) % im ; + return ( (float) rand_state / (float) im ); +} + +void stutter_info(t_stutter *x) +{ + post("there are %d frames in this buffer. Duration is %f.",x->b_frames, x->buffer_duration); +} + +void stutter_new_loop(t_stutter *x) +{ + x->echos = (int)boundrand((float)x->min_echo,(float)x->max_echo); + x->samps_to_go = x->loop_samps = boundrand((float)x->loop_min_samps,(float)x->loop_max_samps); + x->loop_start = boundrand(0.0,1.0) * (x->framesize - x->loop_samps) ; +} + +void stutter_show_loop(t_stutter *x) +{ + post("start %d samps %d", x->loop_start, x->loop_samps); +} + +void stutter_store_loop(t_stutter *x, t_floatarg loop_b_index) +{ + int i = loop_b_index; + x->stored_starts[i] = x->loop_start; + x->stored_samps[i] = x->loop_samps; + // post("loop stored at position %d", i); +} + +void stutter_recall_loop(t_stutter *x, t_floatarg loop_b_index) +{ + // bug warning: recall preceding store will crash program + // need to add warning + int i = loop_b_index; + + if(!x->stored_samps[i]){ + error("no loop stored at position %d!", i); + return; + } + x->loop_start = x->stored_starts[ i ]; + x->samps_to_go = x->loop_samps = x->stored_samps[ i ]; + if( x->loop_min_samps > x->loop_samps ) + x->loop_min_samps = x->loop_samps ; + if( x->loop_max_samps < x->loop_samps ) + x->loop_max_samps = x->loop_samps ; + // post("loop recalled from position %d", i); +} + + +void stutter_set_loop(t_stutter *x, t_symbol *msg, short argc, t_atom *argv) +{ + float temp; + atom_arg_getfloat(&temp, 0, argc, argv); + x->loop_start = temp; + atom_arg_getfloat(&temp, 0, argc, argv); + x->loop_samps = temp; + // post("loop set to: %d %d", x->loop_start, x->loop_samps); +} + +void stutter_lockme(t_stutter *x, t_floatarg f) +{ + int n = (int) f; + if( n > 0 ) { + x->lock_loop = 1; + } else { + x->lock_loop = 0; + } +} +//set min time for loop +void stutter_min_looptime(t_stutter *x, t_floatarg n) +{ + n /= 1000.0; + + if( n < .0001 ){ + n = .0001; + } + x->loop_min_samps = x->R * n ; + if( x->loop_min_samps >= x->loop_max_samps ){ + x->loop_min_samps = x->loop_max_samps - 1; + } + +} + +// set deviation factor +void stutter_randomize_dur(t_stutter *x, t_floatarg n) +{ + + if( n < 0 ) + n = 0; + if( n > 1 ) + n = 1.; + x->ldev = n; +} +void stutter_randomize_start(t_stutter *x, t_floatarg n) +{ + + if( n < 0 ) + n = 0; + if( n > 1 ) + n = 1.; + x->st_dev = n; +} + +// set max time for loop +void stutter_max_looptime(t_stutter *x, t_floatarg n) +{ + n /= 1000.0; + + if( x->buffer_duration > 0.0 ) { + if( n >= x->buffer_duration * .49) { + n = x->buffer_duration * .49 ; + } + } + x->loop_max_samps = x->R * n ; + if( x->loop_max_samps <= x->loop_min_samps ){ + x->loop_max_samps = x->loop_min_samps + 1; + } +} + + + + +void *stutter_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_stutter *x = (t_stutter *)pd_new(stutter_class); + outlet_new(&x->x_obj, gensym("signal")); + + srand(time(0)); + + if(argc<1){ + post("stutter~: warning: no array name given (defaulting to " + "empty symbol)"); + } + x->bufchans = 1; + x->bufname = atom_getsymbolarg(0,argc,argv); + x->loop_min_duration = atom_getintarg(1,argc,argv)/1000.0; + x->loop_max_duration = atom_getintarg(2,argc,argv)/1000.0; + x->taper_duration = atom_getintarg(3,argc,argv)/1000.0; + + if(!x->loop_min_duration) + x->loop_min_duration = .02; + if(!x->loop_max_duration) + x->loop_max_duration = 0.2; + if(!x->taper_duration) + x->taper_duration = .002; + + x->R = sys_getsr(); + if(!x->R) + x->R = 44100.0; + stutter_init(x,0); + return x; +} + +float boundrand(float min, float max) +{ + return min + (max-min) * ((float)rand()/RAND_MAX); +} + +void stutter_taper(t_stutter *x, t_floatarg f) +{ + f *= .001; + if(f>0){ + x->taper_duration = f; + x->taper_samps = x->R * x->taper_duration; + } +} + +void stutter_min_echo(t_stutter *x, t_floatarg f) +{ + int ec = (int)f; + if(ec>0 && ec < x->max_echo){ + x->min_echo = ec; + } else { + error("min echo must be less than max echo, and greater than zero"); + } +} +void stutter_max_echo(t_stutter *x, t_floatarg f) +{ + int ec = (int)f; + + if(ec > x->min_echo){ + x->max_echo = ec; + } else { + error("max echo must be greater than min echo"); + } +} + +void stutter_minmax_echo(t_stutter *x, t_floatarg minf, t_floatarg maxf) +{ + int minec = (int)minf; + int maxec = (int)maxf; + + if( minec < maxec){ + x->min_echo = minec; + x->max_echo - maxec; + } + else { + error("bad inputs to minmax_echo"); + } +} + + +void stutter_init(t_stutter *x,short initialized) +{ + int i; + + if(!initialized){ + x->loop_min_samps = x->loop_min_duration * (float)x->R; + x->loop_max_samps = x->loop_max_duration * (float)x->R; + x->samps_to_go = x->loop_samps = x->loop_min_samps + + (erand() * (float)(x->loop_max_samps-x->loop_min_samps) ) ; + + x->loop_start = 0; + x->min_echo = 2; + x->max_echo = 12; + x->echos = (int) boundrand((float)x->min_echo,(float)x->max_echo); + x->b_index = x->loop_start ; + x->samps_to_go = x->loop_samps; + x->taper_samps = x->R * x->taper_duration; + x->ldev = 0; + x->lock_loop = 0; + x->buffer_duration = 0.0 ; + x->st_dev = 0.0; + x->framesize = 0; + x->new_loop_loop = 0; + x->mute_me = 0; + x->verbose = 0; + x->stored_starts = t_getbytes(1024 * sizeof(int)); + x->stored_samps = t_getbytes(1024 * sizeof(int)); + for(i = 0; i < 1024; i++){ + x->stored_samps[i] = 0; + } + } else { + x->loop_min_samps = x->loop_min_duration * (float)x->R; + x->loop_max_samps = x->loop_max_duration * (float)x->R; + x->samps_to_go = x->loop_samps = x->loop_min_samps + + (erand() * (float)(x->loop_max_samps - x->loop_min_samps)) ; + x->loop_start = 0; + x->b_index = x->loop_start; + x->samps_to_go = x->loop_samps; + x->taper_samps = x->R * x->taper_duration; + x->ldev = 0; + x->lock_loop = 0; + x->buffer_duration = 0.0 ; + x->st_dev = 0.0; + x->framesize = 0; + x->new_loop_loop = 0; + } +} +void stutter_dsp(t_stutter *x, t_signal **sp) +{ + stutter_setarray(x); + + if(x->R != sp[0]->s_sr){ + x->R = sp[0]->s_sr; + x->taper_samps = x->R * x->taper_duration; + x->loop_min_samps = .02 * (t_float)x->R; + x->loop_max_samps = .2 * (t_float) x->R; + } + dsp_add(stutter_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/ugens.h b/externals/lyonpotpourri/ugens.h new file mode 100755 index 000000000..6bccc5f7e --- /dev/null +++ b/externals/lyonpotpourri/ugens.h @@ -0,0 +1,57 @@ +/* THIS IS A TOTALLY HACKED HEADER - NO LONGER ANY GOOD FOR CMIX */ + +#define MAXSECTS 20 +#define RESON_NO_SCL (0.) +#define START 3 +#define STARTM1 2 /* for start of comb memory in a array */ +#define NCOMBS 6 /* for reverb */ +#define NALPASSES 2 /* for reverb */ + +typedef struct { + float ps0; + float ps1; + float ps2; + float ps3; + float c0; + float c1; + float c2; + float c3; +} LSTRUCT ; + +typedef struct { + int len; + float *func; + float amp; + float phs; + float si; +} CMIXOSC ; + +typedef struct { + float *arr; + float lpt; + float rvbt; + int len; + int status; +} CMIXCOMB ; + +typedef struct { + float cf; + float bw; + float scl; + float q[5]; +} CMIXRESON ; + +typedef struct { + float a; + float d; + float s; + float r; + float v1; + float v2; + float v3; + float v4; + float v5; + float *func; + int len; +} CMIXADSR ; + diff --git a/externals/lyonpotpourri/unconvert.c b/externals/lyonpotpourri/unconvert.c new file mode 100755 index 000000000..85392dd71 --- /dev/null +++ b/externals/lyonpotpourri/unconvert.c @@ -0,0 +1,34 @@ +#include "fftease.h" + + + +void unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ) + +{ + int i, + real, + imag, + amp, + freq; + float mag, + phase; +double sin(), cos(); + + for ( i = 0; i <= N2; i++ ) { + + imag = freq = ( real = amp = i<<1 ) + 1; + + if ( i == N2 ) + real = 1; + + mag = C[amp]; + lastphase[i] += C[freq] - i*fundamental; + phase = lastphase[i]*factor; + S[real] = mag*cos( phase ); + + if ( i != N2 ) + S[imag] = -mag*sin( phase ); + + } + +} diff --git a/externals/lyonpotpourri/vdb~-help.pd b/externals/lyonpotpourri/vdb~-help.pd new file mode 100755 index 000000000..4bb6ee545 --- /dev/null +++ b/externals/lyonpotpourri/vdb~-help.pd @@ -0,0 +1,106 @@ +#N canvas 848 86 446 275 10; +#N canvas 0 22 450 300 (subpatch) 0; +#X array vdb-delay-line 88200 float 2; +#X coords 0 1 88200 -1 100 70 1; +#X restore 339 73 graph; +#X obj 20 179 *~ 0.1; +#X obj 20 214 dac~; +#X obj 36 97 r vdb-msgs; +#N canvas 0 22 454 304 input-sound 0; +#X obj 53 162 *~; +#X msg 111 53 tempo \$1; +#X floatatom 110 22 5 0 0 0 - - -, f 5; +#X floatatom 41 71 5 0 0 0 - - -, f 5; +#X obj 40 107 osc~ 450; +#X obj 53 240 outlet~; +#X obj 112 83 samm~ 130 1; +#X obj 112 114 adsr~ 10 30 500 300 0.5 0.2; +#X obj 53 201 *~ 0.5; +#X connect 0 0 8 0; +#X connect 1 0 6 0; +#X connect 2 0 1 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 6 0 7 0; +#X connect 7 0 0 1; +#X connect 8 0 5 0; +#X restore 20 77 pd input-sound; +#N canvas 138 333 474 324 msgs 0; +#X obj 15 193 s vdb-msgs; +#X obj 17 25 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 16 58 inf_hold \$1; +#X msg 112 104 maxdelay \$1; +#X floatatom 112 71 5 1 1000 0 - - -, f 5; +#X obj 116 36 hsl 70 10 1 1000 0 0 empty empty maximum_delay -2 -8 +1 10 -185881 -1 -1 0 1; +#X obj 220 102 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X msg 220 76 1; +#X obj 221 43 loadbang; +#X msg 221 140 always_update \$1; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 9 0; +#X connect 7 0 6 0; +#X connect 8 0 7 0; +#X connect 9 0 0 0; +#X restore 203 197 pd msgs; +#N canvas 110 371 466 316 delaytime 0; +#X obj 87 269 outlet~; +#X obj 309 123 *~ 200; +#X obj 309 151 +~ 799; +#X obj 87 230 clean_selector~ 2; +#X msg 21 131 channel \$1; +#X obj 22 70 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 21 19 loadbang; +#X floatatom 310 64 5 0 0 0 - - -, f 5; +#X msg 22 45 1; +#X obj 309 90 osc~ 0.1; +#X obj 87 196 sig~ 200; +#X text 45 74 select fixed or changing delay time; +#X connect 1 0 2 0; +#X connect 2 0 3 1; +#X connect 3 0 0 0; +#X connect 4 0 3 0; +#X connect 5 0 4 0; +#X connect 6 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 5 0; +#X connect 9 0 1 0; +#X connect 10 0 3 0; +#X restore 148 84 pd delaytime; +#X floatatom 276 90 5 -0.9 0.9 2 feedback vdb-feedback -, f 5; +#X obj 283 178 hsl 70 10 -0.9 0.9 0 0 vdb-feedback vdb-feedback-in +feedback_amt -2 -8 1 10 -185881 -1 -1 1300 1; +#X obj 9 10 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 23 40 vdb~ - a delay line with feedback exposed as garray; +#X floatatom 50 156 5 0 0 2 gain vdb-gain -, f 5; +#X obj 283 205 hsl 70 10 0 1 0 0 vdb-gain vdb-gain-in gain -2 -8 1 +10 -185881 -1 -1 1490 1; +#N canvas 889 561 450 300 initialize 0; +#X obj 157 81 s vdb-feedback-in; +#X msg 157 50 0; +#X obj 156 14 loadbang; +#X obj 27 53 loadbang; +#X obj 28 120 s vdb-gain-in; +#X msg 28 89 0.1; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 3 0 5 0; +#X connect 5 0 4 0; +#X restore 167 155 pd initialize; +#X obj 20 122 vdb~ vdb-delay-line 2000 1000 1 0.7 1; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 14 0; +#X connect 4 0 14 0; +#X connect 6 0 14 1; +#X connect 7 0 14 2; +#X connect 11 0 1 1; +#X connect 14 0 1 0; diff --git a/externals/lyonpotpourri/vdb~.c b/externals/lyonpotpourri/vdb~.c new file mode 100755 index 000000000..a891f486c --- /dev/null +++ b/externals/lyonpotpourri/vdb~.c @@ -0,0 +1,519 @@ +#include "MSPd.h" + +#define OBJECT_NAME "vdb~" + +static t_class *vdb_class; + +typedef struct +{ + float coef; + float cutoff; + float x1; +} t_lpf; + +typedef struct { + t_word *b_samples; + long b_valid; + long b_nchans; + long b_frames; +} t_guffer; // stuff we care about from garrays and buffers + + +typedef struct _vdb +{ + + t_object x_obj; + float x_f; + + float sr; + t_lpf lpf; + short filter; + // + float speed; + float feedback; + float delay_time; + float delay_samps; + float maxdelay; // maximum delay in seconds (cannot be larger than buffer) + long maxdelay_len; // framelength of usable region of buffer + long len; // framelength of buffer + long phs; // current phase + float tap; + short *connections; + short feedback_protect; + short mute; + short interpolate; + short inf_hold; + short always_update; + // copy to buffer + t_symbol *buffername; + t_guffer *delay_buffer; + long b_nchans; + long b_frames; + t_word *b_samples; + long b_valid; + // interface + int inlet_count; + int outlet_count; + int delay_inlet; + int feedback_inlet; + short redraw_flag; // pd only for gating redraw function + +} t_vdb; + +t_int *vdb_perform(t_int *w); + +void vdb_protect(t_vdb *x, t_floatarg state); +void vdb_inf_hold(t_vdb *x, t_floatarg state); +void vdb_always_update(t_vdb *x, t_floatarg state); +void vdb_maxdelay(t_vdb *x, t_floatarg delay); +void vdb_dsp(t_vdb *x, t_signal **sp); +void *vdb_new(t_symbol *s, int argc, t_atom *argv); +void vdb_float(t_vdb *x, t_float f); +void vdb_mute(t_vdb *x, t_floatarg t); +void vdb_interpolate(t_vdb *x, t_floatarg t); +void vdb_show(t_vdb *x); +void vdb_update_buffer(t_vdb *x); +void vdb_coef(t_vdb *x, t_floatarg f); +void vdb_filter(t_vdb *x, t_floatarg t); +void vdb_init(t_vdb *x,short initialized); +int vdb_attach_buffer(t_vdb *x); +void vdb_redraw(t_vdb *x); +void vdb_redraw_array(t_vdb *x, t_floatarg t); +void vdb_free(t_vdb *x); + + +void vdb_tilde_setup(void) +{ + + vdb_class = class_new(gensym("vdb~"),(t_newmethod)vdb_new,(t_method)vdb_free, sizeof(t_vdb), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(vdb_class,t_vdb, x_f ); + class_addmethod(vdb_class,(t_method)vdb_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(vdb_class,(t_method)vdb_protect,gensym("protect"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_inf_hold,gensym("inf_hold"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_maxdelay,gensym("maxdelay"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_always_update,gensym("always_update"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_show,gensym("show"),0); + // class_addmethod(vdb_class,(t_method)vdb_update_buffer,gensym("update_buffer"),0); + class_addmethod(vdb_class,(t_method)vdb_interpolate,gensym("interpolate"),A_FLOAT,0); + class_addmethod(vdb_class,(t_method)vdb_redraw_array,gensym("redraw_array"),A_FLOAT,0); + + potpourri_announce(OBJECT_NAME); +} + + +void vdb_maxdelay(t_vdb *x, t_floatarg delay) +{ + long newlen; + x->maxdelay = 50.0; + newlen = delay * .001 * x->sr; + if(newlen > x->len){ + error("%s: requested a max delay that exceeds buffer size",OBJECT_NAME); + return; + } + x->maxdelay_len = newlen; + +} + +void vdb_update_buffer(t_vdb *x) +{ + vdb_attach_buffer(x); +} + +void vdb_mute(t_vdb *x, t_floatarg t) +{ + x->mute = (short)t; +} + +void vdb_always_update(t_vdb *x, t_floatarg state) +{ + x->always_update = (short) state; +} + +void vdb_redraw_array(t_vdb *x, t_floatarg t) +{ + x->redraw_flag = (short)t; +} + + +void vdb_inf_hold(t_vdb *x, t_floatarg state) +{ + x->inf_hold = (short) state; +} + +void vdb_filter(t_vdb *x, t_floatarg t) +{ + x->filter = (short)t; +} + +void vdb_coef(t_vdb *x, t_floatarg f) +{ + x->lpf.coef = (float)f; +} + +void vdb_show(t_vdb *x) +{ + post("feedback %f delay %f",x->feedback, x->delay_time); +} + +void vdb_interpolate(t_vdb *x, t_floatarg t) +{ + x->interpolate = (short)t; +} + +t_int *vdb_perform(t_int *w) +{ + // DSP config + t_vdb *x = (t_vdb *)(w[1]); + int n; + + float fdelay; + float insamp; //, insamp2; + float outsamp; + float frac; + t_word *delay_line = x->b_samples; + + int phs = x->phs; + long maxdelay_len = x->maxdelay_len; + + float feedback = x->feedback; + short *connections = x->connections; + float sr = x->sr; + short feedback_protect = x->feedback_protect; + short interpolate = x->interpolate; + short inf_hold = x->inf_hold; + float x1,x2; + int idelay; + int dphs,dphs1,dphs2; + long b_nchans = x->b_nchans; + int delay_inlet = x->delay_inlet; + int feedback_inlet = x->feedback_inlet; + t_int i,j; + t_float *input; + t_float *output; + t_float *delay_vec; + t_float *feedback_vec; + + /**********************/ + + + + n = (int) w[b_nchans * 2 + 4]; + + if(x->always_update){ + vdb_attach_buffer(x); + maxdelay_len = x->maxdelay_len; + phs = x->phs; + } + + if( x->mute ) { + for(i = 0; i < b_nchans; i++){ + output = (t_float *) w[4 + b_nchans + i]; + for(j = 0; j < n; j++){ + *output++ = 0.0; + } + } + return (w + b_nchans * 2 + 5); + } + + + + if(!x->b_valid){ + for(i = 0; i < b_nchans; i++){ + output = (t_float *) w[4 + b_nchans + i]; + for(j = 0; j < n; j++){ + *output++ = 0.0; + } + } + return (w + b_nchans * 2 + 5); + } + + fdelay = x->delay_time * .001 * sr; + feedback = x->feedback; + delay_vec = (t_float *) w[b_nchans + 2]; + feedback_vec = (t_float *) w[b_nchans + 3]; + for(i = 0; i < b_nchans; i++){ + input = (t_float *) w[i+2]; + output = (t_float *) w[4 + b_nchans + i]; + phs = x->phs; // reset for each channel + for(j = 0; j < n; j++){ + + // insamp = input[j]; + + if ( connections[delay_inlet]) { + fdelay = delay_vec[j]; + fdelay *= .001 * sr; + if (fdelay < 1. ) + fdelay = 1.; + if( fdelay > maxdelay_len - 1 ) + fdelay = maxdelay_len - 1; + x->delay_time = fdelay; + } + if(! inf_hold ){ + if(connections[feedback_inlet]){ + feedback = feedback_vec[j]; + if( feedback_protect ) { + if( feedback > 0.99) + feedback = 0.99; + if( feedback < -0.99 ) + feedback = -0.99; + } + x->feedback = feedback; + } + } + + idelay = floor(fdelay); + + if(phs < 0 || phs >= maxdelay_len){ + error("%s: bad phase %d",OBJECT_NAME,phs); + phs = 0; + } + + if(interpolate){ + frac = (fdelay - idelay); + dphs1 = phs - idelay; + dphs2 = dphs1 - 1; + + while(dphs1 >= maxdelay_len){ + dphs1 -= maxdelay_len; + } + while(dphs1 < 0){ + dphs1 += maxdelay_len; + } + while(dphs2 >= maxdelay_len){ + dphs2 -= maxdelay_len; + } + while(dphs2 < 0){ + dphs2 += maxdelay_len; + } + + x1 = delay_line[dphs1 * b_nchans + i].w_float; + x2 = delay_line[dphs2 * b_nchans + i].w_float; + outsamp = x1 + frac * (x2 - x1); + + } else { + dphs = phs - idelay; + while(dphs >= maxdelay_len){ + dphs -= maxdelay_len; + } + while(dphs < 0){ + dphs += maxdelay_len; + } + if(dphs < 0 || dphs >= maxdelay_len){ + error("bad dphase %d",dphs); + dphs = 0; + } + outsamp = delay_line[dphs * b_nchans + i].w_float; + + + } + output[j] = outsamp; + if(! inf_hold ){ + insamp = input[j]; + delay_line[phs * b_nchans + i].w_float = insamp + outsamp * feedback; + } + ++phs; + while(phs >= maxdelay_len){ + phs -= maxdelay_len; + } + while(phs < 0){ + phs += maxdelay_len; + } + + } + + } + + + x->phs = phs; + if(x->redraw_flag){ + vdb_redraw(x); + } + return (w + b_nchans * 2 + 5); + + +} + +void *vdb_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + int user_chans; + + t_vdb *x = (t_vdb *)pd_new(vdb_class); + + x->sr = sys_getsr(); + if(argc < 2){ + if (!argc) + { + post("%s: warning: no array name given: defaulting to empty symbol", + OBJECT_NAME); + } else { + error("%s: you must provide a valid buffer name and channel count", + OBJECT_NAME); + return (void *)NULL; + } + } + + if(!x->sr){ + error("zero sampling rate - set to 44100"); + x->sr = 44100; + } + // DSP CONFIG + + + // SET DEFAULTS + x->maxdelay = 50.0; // milliseconds + x->feedback = 0.5; + x->delay_time = 0.0; + + // args: name channels [max delay, initial delay, feedback, interpolation_flag] + + + x->buffername = atom_getsymbolarg(0,argc,argv); + + user_chans = 1; // in Pd buffers always mono... + x->maxdelay = atom_getfloatarg(1,argc,argv); + x->delay_time = atom_getfloatarg(2,argc,argv); + x->feedback = atom_getfloatarg(3,argc,argv); + x->interpolate = atom_getfloatarg(4,argc,argv); + x->b_nchans = user_chans; + x->redraw_flag = 1; + + /* need data checking here */ + x->inlet_count = x->b_nchans + 2; + x->outlet_count = x->b_nchans; + x->delay_inlet = x->b_nchans; + x->feedback_inlet = x->delay_inlet + 1; + + for(i = 0; i < x->inlet_count - 1; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal") ); + + + vdb_init(x,0); + return (x); +} + + void vdb_free(t_vdb *x) + { + + free(x->connections); + } + + + void vdb_init(t_vdb *x,short initialized) + { + // int i; + + + if(!initialized){ + if(!x->maxdelay) + x->maxdelay = 50.0; + x->maxdelay_len = x->maxdelay * .001 * x->sr; + x->feedback_protect = 0; + x->inf_hold = 0; + x->phs = 0; + x->mute = 0; + x->always_update = 0; + x->connections = (short *) calloc(128, sizeof(short)); + } + + } + + + + + void vdb_protect(t_vdb *x, t_floatarg state) + { + x->feedback_protect = state; + } + + int vdb_attach_buffer(t_vdb *x) + { + + t_garray *a; + t_symbol *wavename = x->buffername; + int b_frames; + t_word *b_samples; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); + + x->b_valid = 0; + return 0; + } + else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); + x->b_valid = 0; + return 0; + } + else { + x->b_nchans = 1; + x->b_frames = b_frames; + x->b_samples = b_samples; + x->b_valid = 1; + x->len = x->b_frames; + if(x->maxdelay_len > x->len){ + x->maxdelay_len = x->len; + post("%s: shortened maxdelay to %d frames",OBJECT_NAME,x->maxdelay_len); + } + garray_usedindsp(a); + return(1); + } + + + } + + + void vdb_redraw(t_vdb *x) + { + t_garray *a; + t_symbol *wavename = x->buffername; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, wavename->s_name); + x->b_valid = 0; + } + else { + garray_redraw(a); + } + } + + + void vdb_dsp(t_vdb *x, t_signal **sp) + { + int i; + int vector_count; + t_int **sigvec; + + vector_count = x->inlet_count+x->outlet_count + 2; + + + for(i = 0; i < vector_count - 2; i++){ + + x->connections[i] = 1; + } + + vdb_attach_buffer(x); + + sigvec = (t_int **) calloc(vector_count, sizeof(t_int *)); + for(i = 0; i < vector_count; i++) + sigvec[i] = (t_int *) calloc(sizeof(t_int),1); + + sigvec[0] = (t_int *)x; + + sigvec[vector_count - 1] = (t_int *)sp[0]->s_n; + + for(i = 1; i < vector_count - 1; i++){ + sigvec[i] = (t_int *)sp[i-1]->s_vec; + } + + + + dsp_addv(vdb_perform, vector_count, (t_int *)sigvec); + + free(sigvec); + + + } + + diff --git a/externals/lyonpotpourri/vdp~-help.pd b/externals/lyonpotpourri/vdp~-help.pd new file mode 100755 index 000000000..088c12a50 --- /dev/null +++ b/externals/lyonpotpourri/vdp~-help.pd @@ -0,0 +1,51 @@ +#N canvas 665 223 458 308 10; +#X obj 135 164 vdp~ 20 0 0.5; +#N canvas 627 438 458 308 input-sound 0; +#X obj 130 125 phasor~ 96; +#X obj 130 158 -~ 0.5; +#X obj 130 190 outlet~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 90 79 pd input-sound; +#X floatatom 281 125 5 0 0 0 - - -, f 5; +#N canvas 643 483 454 304 delaytime 0; +#X obj 177 107 osc~ 0.1; +#X obj 177 140 *~ 9.9; +#X obj 177 169 +~ 10; +#X obj 177 198 outlet~; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X restore 172 107 pd delaytime; +#X obj 90 255 *~ 0.1; +#X obj 90 280 dac~; +#X obj 284 113 hsl 80 8 -0.99 0.99 0 0 empty empty feedback_amount +-2 -8 1 10 -76846 -1 -1 4200 1; +#X floatatom 128 235 5 0 0 0 - - -, f 5; +#X obj 132 224 hsl 80 8 0 0.2 0 0 empty empty gain -2 -8 1 10 -76846 +-1 -1 2900 1; +#N canvas 0 22 458 308 capture 0; +#N canvas 0 22 450 300 (subpatch) 0; +#X array vdp-catch 882 float 2; +#X coords 0 1 882 -1 200 140 1; +#X restore 35 85 graph; +#X obj 263 152 s vdp-msgs; +#X msg 263 117 copy_to_buffer vdp-catch; +#X connect 2 0 1 0; +#X restore 238 166 pd capture; +#X obj 13 79 r vdp-msgs; +#X obj 8 10 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 9 46 vdp~ - a simple \, self-contained delay unit with feedback +; +#X connect 0 0 4 0; +#X connect 1 0 0 0; +#X connect 1 0 4 0; +#X connect 2 0 0 2; +#X connect 3 0 0 1; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 6 0 2 0; +#X connect 7 0 4 1; +#X connect 8 0 7 0; +#X connect 10 0 0 0; diff --git a/externals/lyonpotpourri/vdp~.c b/externals/lyonpotpourri/vdp~.c new file mode 100755 index 000000000..0dc5a88c2 --- /dev/null +++ b/externals/lyonpotpourri/vdp~.c @@ -0,0 +1,477 @@ + +#include "MSPd.h" + +#define F_LEN 16384 +#define MAX_DELAY_TIME 3600000.0 // in seconds +#define OBJECT_NAME "vdp~" + +static t_class *vdp_class; + +typedef struct +{ + float coef; + float cutoff; + float x1; +} t_lpf; + +typedef struct { + float *b_samples; + long b_valid; + long b_nchans; + long b_frames; + t_symbol *wavename; +} t_guffer; // stuff we care about from garrays and buffers + +typedef struct _vdp +{ + + t_object x_obj; + float x_f; + float sr; + + t_lpf lpf; + short filter; + + float speed; + float feedback; + float delay_time; + float delay_samps; + float maxdel; + + float *delay_line ; + float *write_ptr; // location to write current input + float *startmem; // first address in delay line + float *endmem; // last address to read in delay line + int len; + int phs; + float tap; + short connections[4]; + + short feedback_protect; + short mute; + short interpolate; + short inf_hold; + /* copy to buffer */ + t_guffer *destbuf; /* for copying to another buffer */ + /* tapering */ + long taper_count; + float taper_feedback; +} t_vdp; + +t_int *vdp_perform(t_int *w); + +void vdp_protect(t_vdp *x, double state); +void vdp_dsp(t_vdp *x, t_signal **sp); +void *vdp_new(t_symbol *s, int argc, t_atom *argv); +void vdp_float(t_vdp *x, double f); +void vdp_mute(t_vdp *x, t_floatarg t); +void vdp_interpolate(t_vdp *x, t_floatarg t); +void vdp_show(t_vdp *x); +void vdp_coef(t_vdp *x, t_floatarg f); +void vdp_filter(t_vdp *x, t_floatarg t); +void vdp_init(t_vdp *x,short initialized); +void vdp_clear(t_vdp *x); +void vdp_inf_hold(t_vdp *x,t_floatarg state); +void vdp_copy_to_buffer(t_vdp *x, t_symbol *msg, short argc, t_atom *argv); +int vdp_setdestbuf(t_vdp *x, t_symbol *wavename); +void vdp_redraw(t_vdp *x); +void vdp_free(t_vdp *x); + + +void vdp_tilde_setup(void) +{ + vdp_class = class_new(gensym("vdp~"),(t_newmethod)vdp_new,(t_method)vdp_free, sizeof(t_vdp), 0, A_GIMME,0); + CLASS_MAINSIGNALIN(vdp_class,t_vdp, x_f ); + + class_addmethod(vdp_class,(t_method)vdp_dsp,gensym("dsp"),A_CANT,0); + class_addmethod(vdp_class,(t_method)vdp_protect,gensym("protect"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_filter,gensym("filter"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_coef,gensym("coef"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_show,gensym("show"),0); + class_addmethod(vdp_class,(t_method)vdp_clear,gensym("clear"),0); + class_addmethod(vdp_class,(t_method)vdp_inf_hold,gensym("inf_hold"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_interpolate,gensym("interpolate"),A_FLOAT,0); + class_addmethod(vdp_class,(t_method)vdp_copy_to_buffer,gensym("copy_to_buffer"),A_GIMME,0); + potpourri_announce(OBJECT_NAME); +} + +void vdp_mute(t_vdp *x, t_floatarg t) +{ + x->mute = (short)t; +} + +void vdp_inf_hold(t_vdp *x, t_floatarg t) +{ + x->inf_hold = (short)t; + x->taper_feedback = 1.0; + x->taper_count = 0; +} + + +void vdp_filter(t_vdp *x, t_floatarg t) +{ + x->filter = (short)t; +} + +void vdp_coef(t_vdp *x, t_floatarg f) +{ + x->lpf.coef = (float)f; +} + +void vdp_show(t_vdp *x) +{ + post("feedback %f delay %f",x->feedback, x->delay_time); +} + +void vdp_interpolate(t_vdp *x, t_floatarg t) +{ + x->interpolate = (short)t; +} + +t_int *vdp_perform(t_int *w) +{ + // DSP config + t_vdp *x = (t_vdp *)(w[1]); + t_float *input = (t_float *)(w[2]); + t_float *delay_vec = (t_float *)(w[3]); + t_float *feedback_vec = (t_float *)(w[4]); + t_float *output = (t_float *)(w[5]); + int n = (int) w[6]; + + float fdelay; + float insamp; + float outsamp = 0.0; + float frac; + float *write_ptr = x->write_ptr; + float *read_ptr; + float *startmem = x->startmem; + float *endmem = x->endmem; + int len = x->len; + float tap = x->tap; + float feedback = x->feedback; + float delay_samps = x->delay_samps; + short *connections = x->connections; + float sr = x->sr; + float msr = sr * 0.001; + short feedback_protect = x->feedback_protect; + short interpolate = x->interpolate; + t_lpf lpf = x->lpf; + short filter = x->filter; + float x1,x2; + int idelay; + + short inf_hold = x->inf_hold; + + + /**********************/ + + if( x->mute ) { + /* while(n--){ + *output++ = 0.0; + } */ + memset( (char *)output, 0, n * sizeof(float) ); + return (w+7); + } + + fdelay = delay_samps; + idelay = floor(fdelay); + + /* loop only for infinite hold */ + + if(inf_hold){ + while( n-- ){ + read_ptr = write_ptr; + outsamp = *read_ptr; + *write_ptr++; + if( write_ptr >= endmem ){ + write_ptr = startmem; + } + *output++ = outsamp; + } + x->write_ptr = write_ptr; + x->delay_samps = fdelay; + return (w+7); + } + + + /* normal main loop*/ + while( n-- ){ + + // Pull Data off Signal buffers + insamp = *input++; + + + if ( connections[1]) { + fdelay = *delay_vec++ * msr; // convert delay from milliseconds to samples + if (fdelay < 0.0 ) + fdelay = 0.0; + if( fdelay >= len ) + fdelay = len - 1; + idelay = floor(fdelay); + } + + if(connections[2]){ + feedback = *feedback_vec++; + if( feedback_protect ) { + if( feedback > 0.99) + feedback = 0.99; + if( feedback < -0.99 ) + feedback = -0.99; + } + + } + + + /* make fdelay behave */ + if(fdelay < 0.0){ + fdelay = 0.0; + } + else if(fdelay >= len){ + fdelay = len - 1; + } + idelay = floor(fdelay); + + if(interpolate){ + frac = (fdelay - idelay); + read_ptr = write_ptr - idelay; + if( read_ptr < startmem ){ + read_ptr += len; + } + x1 = *read_ptr--; + if( read_ptr < startmem ){ + read_ptr += endmem - startmem; + } + x2 = *read_ptr; + outsamp = x1 + frac * (x2 - x1); + + } + else { // no interpolation case + read_ptr = write_ptr - idelay; + if( read_ptr < startmem ){ + read_ptr += len; + } + outsamp = *read_ptr; + + } + if(filter){ + outsamp += lpf.x1 * lpf.coef; + outsamp /= (1.0+lpf.coef); + lpf.x1 = outsamp; + } + + *write_ptr++ = insamp + outsamp * feedback; + + if( write_ptr >= endmem ){ + write_ptr = startmem; + } + + *output++ = outsamp; + } + + x->tap = tap; + x->feedback = feedback; + x->delay_time = fdelay; + x->delay_samps = fdelay; + x->write_ptr = write_ptr; + + return (w+7); + + +} + +void *vdp_new(t_symbol *s, int argc, t_atom *argv) +{ + int i; + + t_vdp *x = (t_vdp *)pd_new(vdp_class); + for(i = 0; i < 2; i++){ + inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); + } + outlet_new(&x->x_obj, gensym("signal") ); + x->sr = sys_getsr(); + if(!x->sr){ + error("zero sampling rate - set to 44100"); + x->sr = 44100; + } + // DSP CONFIG + + + // SET DEFAULTS + x->maxdel = 50.0; // milliseconds + x->feedback = 0.5; + x->delay_time = 0.0; + + /* + atom_arg_getfloat(&x->maxdel,0,argc,argv); + atom_arg_getfloat(&x->delay_time,1,argc,argv); + atom_arg_getfloat(&x->feedback,2,argc,argv); + */ + x->maxdel = atom_getfloatarg(0,argc,argv); + x->delay_time = atom_getfloatarg(1,argc,argv); + x->feedback = atom_getfloatarg(2,argc,argv); + x->interpolate = atom_getfloatarg(3,argc,argv); + if(!x->maxdel) + x->maxdel = 50.0; + + vdp_init(x,0); + return (x); +} + +void vdp_free(t_vdp *x) +{ + free(x->delay_line); +} + +void vdp_clear(t_vdp *x) +{ + memset((char*)x->delay_line,0,(x->len + 2) * sizeof(float)); +} + + +void vdp_init(t_vdp *x,short initialized) +{ + //int i; + + if(!initialized){ + x->feedback_protect = 0; + x->interpolate = 1; + x->filter = 0; + x->inf_hold = 0; + if( x->maxdel < .00001 ){ + x->maxdel = .00001; + } + if( x->maxdel > MAX_DELAY_TIME ){ + error("%s: %f is too long, delay time set to max of %f",OBJECT_NAME,x->maxdel, MAX_DELAY_TIME); + x->maxdel = MAX_DELAY_TIME; + } + x->len = x->maxdel * .001 * x->sr; + x->lpf.coef = 0.5; + x->lpf.x1 = 0.0; + x->delay_line = (float *) calloc((x->len + 2), sizeof(float)); + x->destbuf = (t_guffer *) calloc(1,sizeof(t_guffer)); + x->phs = 0; + x->mute = 0; + x->tap = 0; + } else { + x->len = x->maxdel * .001 * x->sr; + x->delay_line = (float *) realloc(x->delay_line, (x->len + 2) * sizeof(float)); + memset((char*)x->delay_line,0,(x->len + 2) * sizeof(float)); + } + x->startmem = x->delay_line; + x->endmem = x->startmem + x->len; + // x->endmem = x->startmem + (x->len - 1); + + x->write_ptr = x->startmem; + /* + post("startmem %d endmem %d len %d diff %d diffback %d", x->startmem, x->endmem, x->len, x->endmem - x->startmem, ( x->endmem - x->startmem) /sizeof(float)); + */ +} + +void vdp_dsp(t_vdp *x, t_signal **sp) +{ + // DSP CONFIG + x->connections[1] = 1; + x->connections[2] = 1; + + if(x->sr != sp[0]->s_sr){ + x->sr = sp[0]->s_sr; + vdp_init(x,1); + } + dsp_add(vdp_perform, 6, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, + sp[0]->s_n); + +} + + + +void vdp_protect(t_vdp *x, double state) +{ + x->feedback_protect = state; +} + +void vdp_copy_to_buffer(t_vdp *x, t_symbol *msg, short argc, t_atom *argv) +{ + t_symbol *destname; + + float *b_samples = x->delay_line; + long b_nchans = 1; + long b_frames = x->len + 2; + + float *b_dest_samples; + long b_dest_nchans; + long b_dest_frames; + + + destname = atom_getsymarg(0,argc,argv); + + if(! vdp_setdestbuf(x, destname)){ + post("could not find buffer"); + return; + } + b_dest_samples = x->destbuf->b_samples; + b_dest_nchans = x->destbuf->b_nchans; + b_dest_frames = x->destbuf->b_frames; + + + if(b_nchans != 1){ + error("%s: buffer must be mono",OBJECT_NAME); + return; + } + if(b_dest_frames < b_frames ){ + // post("%s: destination buffer %s is too small, truncating",OBJECT_NAME,destname->s_name); + b_frames = b_dest_frames; // local copy only + } + // post("cleaning out %d frames",b_dest_frames); + /* first clean out destination */ + memset((char *)b_dest_samples, 0, b_dest_frames * 1 * sizeof(float)); + + // post("copying %d frames",b_frames); + + /* now copy segment */ + memcpy(b_dest_samples, b_samples, b_frames * 1 * sizeof(float) ); + vdp_redraw(x); +} + +int vdp_setdestbuf(t_vdp *x, t_symbol *wavename) +{ + + t_garray *a; + // t_symbol *wavename = x->buffername; + int b_frames; + float *b_samples; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); + + x->destbuf->b_valid = 0; + return 0; + } + else if (!garray_getfloatarray(a, &b_frames, &b_samples)) { + pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); + x->destbuf->b_valid = 0; + return 0; + } + else { + x->destbuf->b_nchans = 1; + x->destbuf->b_frames = b_frames; + x->destbuf->b_samples = b_samples; + x->destbuf->b_valid = 1; + x->destbuf->wavename = wavename; + garray_usedindsp(a); + return(1); + } +} + +void vdp_redraw(t_vdp *x) +{ + t_garray *a; + t_symbol *wavename = x->destbuf->wavename; + if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { + if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, wavename->s_name); + x->destbuf->b_valid = 0; + } + else { + garray_redraw(a); + } +} diff --git a/externals/lyonpotpourri/vecdex~-help.pd b/externals/lyonpotpourri/vecdex~-help.pd new file mode 100755 index 000000000..32bc95eb5 --- /dev/null +++ b/externals/lyonpotpourri/vecdex~-help.pd @@ -0,0 +1,73 @@ +#N canvas 552 251 450 300 10; +#X obj 39 260 dac~; +#X obj 39 200 *~ 0.01; +#X obj 39 125 noise~; +#N canvas 532 235 601 529 fft-hipass 0; +#X obj 86 50 inlet~; +#X obj 225 472 outlet~; +#X obj 225 98 windowvec~; +#X obj 225 136 rfft~, f 6; +#X obj 225 171 cartopol~; +#X obj 225 346 poltocar~; +#X obj 225 376 rifft~; +#X obj 225 439 windowvec~; +#X obj 225 406 *~ 0; +#X obj 421 264 *; +#X msg 373 186 1 1024 8; +#X obj 373 217 unpack f f f; +#X obj 373 296 /; +#X floatatom 373 328 12 0 0 0 - - -, f 12; +#X text 454 329 rescale factor; +#X obj 373 155 loadbang; +#X obj 185 311 *~; +#X obj 125 268 greater~ 20; +#X obj 91 212 vecdex~; +#X msg 162 212 top \$1; +#X obj 162 180 inlet; +#X text 164 22 only pass through bin magnitudes for bin numbers greater +than the "top" number sent to greater~; +#X obj 79 484 block~ 1024 8; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 4 1; +#X connect 4 0 16 1; +#X connect 4 1 5 1; +#X connect 5 0 6 0; +#X connect 5 1 6 1; +#X connect 6 0 8 0; +#X connect 7 0 1 0; +#X connect 8 0 7 0; +#X connect 9 0 12 1; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 9 0; +#X connect 11 2 9 1; +#X connect 12 0 13 0; +#X connect 13 0 8 1; +#X connect 15 0 10 0; +#X connect 16 0 5 0; +#X connect 17 0 16 0; +#X connect 18 0 17 0; +#X connect 19 0 17 0; +#X connect 20 0 19 0; +#X restore 39 164 pd fft-hipass; +#X obj 117 94 hsl 128 15 0 100 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 114 128 5 0 0 0 - - -, f 5; +#X text 253 99 set cutoff bin; +#X obj 118 200 hsl 128 15 0 0.2 0 0 empty empty gain -2 -8 0 10 -262144 +-1 -1 0 1; +#X text 129 165 <- open to see workings of this hipass filter; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X text 28 36 vecdex~ - outputs the current index within a signal vector. +It can be useful for spectral processing \, as demonstrated here., +f 64; +#X connect 1 0 0 0; +#X connect 1 0 0 1; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 3 1; +#X connect 7 0 1 1; diff --git a/externals/lyonpotpourri/vecdex~.c b/externals/lyonpotpourri/vecdex~.c new file mode 100755 index 000000000..626907b15 --- /dev/null +++ b/externals/lyonpotpourri/vecdex~.c @@ -0,0 +1,67 @@ +/* Required Header Files */ + +#include "MSPd.h" + +/* The class pointer */ + +static t_class *vecdex_class; + +/* The object structure */ + +typedef struct _vecdex { + t_object obj; + t_float x_f; +// float top; +} t_vecdex; + +#define OBJECT_NAME "vecdex~" + +/* Function prototypes */ + +void *vecdex_new(t_symbol *msg, short argc, t_atom *argv); +void vecdex_dsp(t_vecdex *x, t_signal **sp); +t_int *vecdex_perform(t_int *w); + +/* The object setup function */ + +void vecdex_tilde_setup(void) +{ + vecdex_class = class_new(gensym("vecdex~"), (t_newmethod)vecdex_new, 0,sizeof(t_vecdex),0,A_GIMME,0); + CLASS_MAINSIGNALIN(vecdex_class, t_vecdex, x_f); + class_addmethod(vecdex_class, (t_method)vecdex_dsp, gensym("dsp"), A_CANT, 0); + + potpourri_announce(OBJECT_NAME); +} + +/* The new instance routine */ + +void *vecdex_new(t_symbol *msg, short argc, t_atom *argv) +{ + t_vecdex *x = (t_vecdex *)pd_new(vecdex_class); + outlet_new(&x->obj, gensym("signal")); + return x; +} + +/* The free memory function*/ + + +/* The perform routine */ + +t_int *vecdex_perform(t_int *w) +{ + t_vecdex *x = (t_vecdex *) (w[1]); +// t_float *input = (t_float *) (w[2]); + t_float *output = (t_float *) (w[3]); + int n = (int) w[4]; + int i; + + for(i=0; i < n; i++){ + output[i] = i; + } + return w + 5; +} + +void vecdex_dsp(t_vecdex *x, t_signal **sp) +{ + dsp_add(vecdex_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} \ No newline at end of file diff --git a/externals/lyonpotpourri/waveshape~-help.pd b/externals/lyonpotpourri/waveshape~-help.pd new file mode 100755 index 000000000..be1ace791 --- /dev/null +++ b/externals/lyonpotpourri/waveshape~-help.pd @@ -0,0 +1,36 @@ +#N canvas 482 57 462 373 10; +#X obj 27 239 waveshape~; +#X obj 27 303 *~ 0.1; +#X obj 27 330 dac~; +#X msg 123 164 0 0 0 1 1; +#X msg 125 190 0 0.5 0 0 1 0.3 1; +#X msg 125 217 0 0.2 0 0.2 0 0.2 0 0 1 0 0 0 0 0 0.5; +#X text 122 146 select a weighted summation of Chebychev polynomials +; +#X floatatom 80 304 5 0 0 0 - - -, f 5; +#X floatatom 27 91 5 0 0 0 - - -, f 5; +#X obj 256 192 loadbang; +#X obj 27 109 osc~ 200; +#X obj 27 275 killdc~; +#X obj 28 16 cnv 15 160 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X obj 98 84 osc~ 0.1; +#X obj 98 105 *~ 0.49; +#X obj 98 128 +~ 0.51; +#X obj 27 159 *~; +#X text 24 55 waveshape~ basic waveshaping unit; +#X connect 0 0 11 0; +#X connect 1 0 2 0; +#X connect 1 0 2 1; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 7 0 1 1; +#X connect 8 0 10 0; +#X connect 9 0 5 0; +#X connect 10 0 16 0; +#X connect 11 0 1 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 16 1; +#X connect 16 0 0 0; diff --git a/externals/lyonpotpourri/waveshape~.c b/externals/lyonpotpourri/waveshape~.c new file mode 100755 index 000000000..47822b6b6 --- /dev/null +++ b/externals/lyonpotpourri/waveshape~.c @@ -0,0 +1,171 @@ +#include "MSPd.h" + +#define OBJECT_NAME "waveshape~" + +#define ws_MAXHARMS (256) + + +static t_class *waveshape_class; + + +typedef struct _waveshape +{ + + t_object x_obj; + float x_f; + int flen; + float *wavetab; + float *tempeh; // work function + int hcount; + float *harms; + short mute; +} t_waveshape; + +void *waveshape_new(void); + +t_int *waveshape_perform(t_int *w); +void waveshape_dsp(t_waveshape *x, t_signal **sp); +void waveshape_list (t_waveshape *x, t_symbol *msg, short argc, t_atom *argv); +void update_waveshape_function( t_waveshape *x ); +//float mapp(); +void waveshape_mute(t_waveshape *x, t_floatarg tog); +void waveshape_free(t_waveshape *x); + + +void waveshape_tilde_setup(void){ + waveshape_class = class_new(gensym("waveshape~"), (t_newmethod)waveshape_new, + (t_method)waveshape_free,sizeof(t_waveshape), 0,0); + CLASS_MAINSIGNALIN(waveshape_class, t_waveshape, x_f); + class_addmethod(waveshape_class,(t_method)waveshape_dsp,gensym("dsp"),0); + class_addmethod(waveshape_class,(t_method)waveshape_mute,gensym("mute"),A_FLOAT,0); + class_addmethod(waveshape_class,(t_method)waveshape_list,gensym("list"),A_GIMME,0); + potpourri_announce(OBJECT_NAME); +} + + +void waveshape_free(t_waveshape *x) +{ + free(x->wavetab); + free(x->tempeh); + free(x->harms); +} + + +void waveshape_list (t_waveshape *x, t_symbol *msg, short argc, t_atom *argv) +{ + short i; + t_symbol *fraud; + fraud = msg; + x->hcount = 0; + for (i=0; i < argc; i++) { + if (argv[i].a_type == A_FLOAT) { + x->harms[ x->hcount ] = argv[i].a_w.w_float; + ++(x->hcount); + } + } + update_waveshape_function( x ); + +} + +void waveshape_mute(t_waveshape *x, t_floatarg tog) +{ + x->mute = tog; +} + +void *waveshape_new(void) +{ + t_waveshape *x = (t_waveshape *)pd_new(waveshape_class); + outlet_new(&x->x_obj, gensym("signal")); + + x->flen = 1<<16 ; + x->wavetab = (float *) calloc( x->flen, sizeof(float) ); + x->tempeh = (float *) calloc( x->flen, sizeof(float) ); + x->harms = (float *) calloc( ws_MAXHARMS, sizeof(float) ); + x->hcount = 4; + x->harms[0] = 0; + x->harms[1] = .33; + x->harms[2] = .33; + x->harms[3] = .33; + x->mute = 0; + update_waveshape_function( x ); + return (x); +} + +void update_waveshape_function( t_waveshape *x ) { + float point; + int i, j; + float min, max; + // zero out function; + for( i = 0; i < x->flen; i++ ){ + x->tempeh[i] = 0; + } + for( i = 0 ; i < x->hcount; i++ ){ + if( x->harms[i] > 0.0 ) { + for( j = 0; j < x->flen; j++ ){ + point = -1.0 + 2.0 * ( (float) j / (float) x->flen) ; + x->tempeh[j] += x->harms[i] * cos( (float) i * acos( point ) ); + } + } + } + min = 1; max = -1; + for( j = 0; j < x->flen; j++ ){ + if( min > x->tempeh[j] ) + min = x->tempeh[j]; + if( max < x->tempeh[j] ) + max = x->tempeh[j]; + + } + // post("min:%f, max:%f",min,max); + // normalize from -1 to +1 + if( (max - min) == 0 ){ + post("all zero function - watch out!"); + return; + } + for( j = 0; j < x->flen; j++ ){ + x->tempeh[j] = -1.0 + ( (x->tempeh[j] - min) / (max - min) ) * 2.0 ; + } + // put tempeh into waveshape function + for( j = 0; j < x->flen; j++ ){ + x->wavetab[j] = x->tempeh[j]; + } +} + +t_int *waveshape_perform(t_int *w) +{ + float insamp; // , waveshape, ingain ; + int windex ; + + t_waveshape *x = (t_waveshape *) (w[1]); + t_float *in = (t_float *)(w[2]); + t_float *out = (t_float *)(w[3]); + int n = (int) w[4]; + int flenm1 = x->flen - 1; + float *wavetab = x->wavetab; + + if(x->mute){ + while(n--){ + *out++ = 0.0; + } + return w+5; + } + + while (n--) { + insamp = *in++; + if(insamp > 1.0){ + insamp = 1.0; + } + else if(insamp < -1.0){ + insamp = -1.0; + } + windex = ((insamp + 1.0)/2.0) * (float)flenm1 ; + *out++ = wavetab[windex] ; + } + + return (w+5); +} + +void waveshape_dsp(t_waveshape *x, t_signal **sp) +{ + dsp_add(waveshape_perform, 4, x, sp[0]->s_vec,sp[1]->s_vec,sp[0]->s_n); +} + diff --git a/externals/lyonpotpourri/windowvec~-help.pd b/externals/lyonpotpourri/windowvec~-help.pd new file mode 100755 index 000000000..2c750387f --- /dev/null +++ b/externals/lyonpotpourri/windowvec~-help.pd @@ -0,0 +1,57 @@ +#N canvas 506 441 450 300 10; +#N canvas 91 32 532 393 basic-fft 0; +#X obj 225 66 inlet~; +#X obj 225 341 outlet~; +#X obj 225 98 windowvec~; +#X obj 225 136 rfft~, f 6; +#X obj 75 341 block~ 1024 8; +#X obj 225 171 cartopol~; +#X obj 225 215 poltocar~; +#X obj 225 245 rifft~; +#X obj 225 308 windowvec~; +#X obj 225 275 *~ 0; +#X obj 394 185 *; +#X msg 346 107 1 1024 8; +#X obj 346 138 unpack f f f; +#X obj 346 217 /; +#X floatatom 346 249 12 0 0 0 - - -, f 12; +#X text 427 250 rescale factor; +#X obj 346 76 loadbang; +#X text 28 195 Any processing would go here ->; +#X text 44 321 sets FFT size and overlap; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 5 1; +#X connect 5 0 6 0; +#X connect 5 1 6 1; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 1 0; +#X connect 9 0 8 0; +#X connect 10 0 13 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 1 10 0; +#X connect 12 2 10 1; +#X connect 13 0 14 0; +#X connect 14 0 9 1; +#X connect 16 0 11 0; +#X restore 32 136 pd basic-fft; +#X obj 32 109 osc~ 440; +#X obj 32 210 dac~; +#X obj 32 172 *~ 0.01; +#X floatatom 32 86 5 0 0 0 - - -, f 5; +#X obj 26 4 cnv 15 155 25 empty empty LyonPotpourri 20 12 1 18 -260097 +-204786 0; +#X floatatom 103 173 5 0 0 2 gain - -, f 5; +#X text 28 35 windowvec~ - applies a Hann window to each incoming signal +vector. Useful for the the windowing portion of an overlap-add process. +, f 66; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 2 0; +#X connect 3 0 2 1; +#X connect 4 0 1 0; +#X connect 6 0 3 1; diff --git a/externals/lyonpotpourri/windowvec~.c b/externals/lyonpotpourri/windowvec~.c new file mode 100755 index 000000000..cf471ca72 --- /dev/null +++ b/externals/lyonpotpourri/windowvec~.c @@ -0,0 +1,97 @@ +/* Required Header Files */ + +#include "MSPd.h" + +/* The class pointer */ + +static t_class *windowvec_class; + +/* The object structure */ + +typedef struct _windowvec { + t_object obj; + t_float x_f; + float *envelope; + long vecsize; + long oldbytes; +} t_windowvec; + +#define OBJECT_NAME "windowvec~" + +/* Function prototypes */ + +void *windowvec_new(void); +void windowvec_dsp(t_windowvec *x, t_signal **sp, short *count); +t_int *windowvec_perform(t_int *w); + +/* The object setup function */ + +void windowvec_tilde_setup(void) +{ + windowvec_class = class_new(gensym("windowvec~"), (t_newmethod)windowvec_new, 0, sizeof(t_windowvec), 0,0); + CLASS_MAINSIGNALIN(windowvec_class, t_windowvec, x_f); + class_addmethod(windowvec_class, (t_method)windowvec_dsp, gensym("dsp"), A_CANT, 0); + potpourri_announce(OBJECT_NAME); +} + +/* The new instance routine */ + +void *windowvec_new(void) +{ + t_windowvec *x = (t_windowvec *)pd_new(windowvec_class); + outlet_new(&x->obj, gensym("signal")); + x->vecsize = 0; + x->envelope = NULL; + return x; +} + +/* The free memory function*/ + +void windowvec_free(t_windowvec *x, t_signal **sp, short *count) +{ + freebytes(x->envelope, x->oldbytes); +} + +/* The perform routine */ + +t_int *windowvec_perform(t_int *w) +{ + t_windowvec *x = (t_windowvec *) (w[1]); + t_float *input = (t_float *) (w[2]); + t_float *output = (t_float *) (w[3]); + int n = (int) w[4]; + int i; + float *envelope = x->envelope; + + /* Apply a Hann window to the input vector */ + + for(i=0; i < n; i++){ + output[i] = input[i] * envelope[i]; + } + return w + 5; +} + +void windowvec_dsp(t_windowvec *x, t_signal **sp, short *count) +{ + int i; + float twopi = 8. * atan(1); + if(x->vecsize != sp[0]->s_n){ + x->vecsize = sp[0]->s_n; + + /* Allocate memory */ + + if(x->envelope == NULL){ + x->envelope = (float *) getbytes(x->vecsize * sizeof(float)); + } else { + x->envelope = (float *) resizebytes(x->envelope, x->oldbytes, x->vecsize * sizeof(float)); + } + x->oldbytes = x->vecsize * sizeof(float); + + /* Generate a Hann window */ + + for(i = 0 ; i < x->vecsize; i++){ + x->envelope[i] = - 0.5 * cos(twopi * (i / (float)x->vecsize)) + 0.5; + } + } + dsp_add(windowvec_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); +} \ No newline at end of file -- GitLab